在蘋果的官方文檔中列出了我們在調試中能用到的一些命令,我們在這重點講一些常用的命令
調試本地檔案方法(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: