Xcode進階調試技巧(1)__lldb

來源:互聯網
上載者:User
在蘋果的官方文檔中列出了我們在調試中能用到的一些命令,我們在這重點講一些常用的命令

調試本地檔案方法(Mac OS X):(lldb) target create "/Users/piaoyun/Desktop/xx.app/Contents/MacOS/xxxx"

遠端偵錯方法:

裝置端運行:

附加進程:

./debugserver *:1234 -a "YourAPPName"

直接啟動進程:

debugserver -x backboard *:1234 /path/to/app/executable

例:

debugserver -x backboard *:1234 /Applications/MobileNotes.app/MobileNotes

此命令會啟動記事本,並斷在dyld的第一條指令上


在Mac終端運行lldb命令後,輸入以下2條命令:
platform select remote-ios
process connect connect://你的裝置IP地址:1234


用USB串連方法:

////////////////////////////////////////////////////////////////////////////////////////

wget http://cgit.sukimashita.com/usbmuxd.git/snapshot/usbmuxd-1.0.8.tar.bz2
tar xjfv usbmuxd-1.0.8.tar.bz2
cd usbmuxd-1.0.8/python-client/
python tcprelay.py -t 1234:1234

在Mac終端運行lldb命令後,輸入以下2條命令:

platform select remote-ios

process connect connect://localhost:1234

////////////////////////////////////////////////////////////////////////////////////////

 -(void)loginWithUserName:(NSString *)username password:(NSString *)password

{

    NSLog(@"login.... username:%@   password:%@", username, password);  // 假設我們在此下斷點

}

一、基本操作 1.1.視圖層次

列印視圖層次 po [self.contentView recursiveDescription] 1.2.改變某個取值

int a = 1;//Console expr a=2NSLog(@"實際值: %d", a);
1.3.call 改變view的背景色
call [self.view setBackgroundColor:[UIColor redColor]]
1.4.聲明變數
expr int $b=2 或者 e int $b=2//輸出  po $b

print (type)運算式

例子:

print (int)$r6

print username

1.5.列印堆棧

ios中列印堆棧方法是 NSThread callStackSymbols,這裡調試的時候有個簡單的方法如下

bt  或者  bt all
1.6.更改方法傳回值

thread return NO/YES

-(BOOL) returnYES{    //thread return NO ,可以更改函數傳回值    return YES;}//方法返回結果為NO  
1.7.多線程異常後查看曆史對象的malloc分配曆史

先開啟Enable Zombie Objects 和 Malloc Stack

(lldb) command script import lldb.macosx.heap(lldb) malloc_info -S 0x7ff7206c3a70 
1.8.寄存器尋找對象

曾經遇到過一個問題,[self.tableview reloadData]直接奔潰。這時候tableview其實沒有問題,我們要怎麼去找問題呢。


如上圖所示,最後我們通過malloc_info -S 0x00007fe99a629560來查看對象分配在堆裡面的具體的地址,隨後在左側開啟table的所有變數,輸入這個地址即能夠看到這個是什麼成員。

1.9.  c


繼續執行


7.s 

源碼層級逐步執行,遇到子函數則進入


8.si

逐步執行,遇到子函數則進入


9.n 

源碼層級逐步執行,遇到子函數不進入,直接步過


10.ni

逐步執行,遇到子函數不進入,直接步過


11.finish/f

退出子函數


12.thread list

 

列印線程列表

 

13.image lookup -a 運算式、image list

例子:

image lookup -a $pc

返回如下:

      Address: debug[0x0000b236] (debug.__TEXT.__text + 1254)

      Summary: debug`main + 58 at main.m:16

 

 

列印載入模組列表

image list [-f -o 通常帶這兩個參數使用]

返回如下:

[  0] 40E417A4-F966-3DB4-B028-B0272DC016A7 0x000a0000 /Users/piao/Library/Developer/Xcode/DerivedData/debug-bdkhskdqykkoqmhjedilckzvpuls/Build/Products/Debug-iphoneos/debug.app/debug 

      /Users/piao/Library/Developer/Xcode/DerivedData/debug-bdkhskdqykkoqmhjedilckzvpuls/Build/Products/Debug-iphoneos/debug.app.dSYM/Contents/Resources/DWARF/debug

[  1] 011601C0-F561-3306-846B-94A7C8C841DA 0x2d9e6000 /Users/piao/Library/Developer/Xcode/iOS DeviceSupport/7.1.2 (11D257)/Symbols/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics


尋找某個函數:


對於有偵錯符號的這樣使用

image lookup -r -n <FUNC_REGEX>

對於無偵錯符號的這樣使用:

image lookup -r -s <FUNC_REGEX>


 

14.disassemble -a 地址

例子:

dis -a $pc

debug`main at main.m:14:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.