0.笨辦法html
看變量、對象?NSLog+從新編譯運行;
改某對象?改源碼+從新編譯運行;
隔離某個方法?在方法中寫 return 跳出+從新編譯運行;ios
慢!!!git
改源碼+從新編譯的方式要等待時間太長,而且看起來特別不高端。試試程序員最喜歡的命令行模式——LLDB。程序員
print\p\po 打印對象github
高級一點:十六進制p/x 16,二進制p/t 16 完整格式清單express
po [[UIWindow keyWindow] recursiveDescription] 來檢查層次結構,以文本形式打印出完整的視圖層次結構
po [[[UIWindow keyWindow] rootViewController] _printHierarchy] 來檢查視圖控制器xcode
expression\e 更改變量值app
開頭
thread return,能夠隔離函數,僞造返回值,若非開頭用這個語句,可能形成內存泄露。注意
1)在 LLDB 中使用變量要加$符號
p (char)[[$array objectAtIndex:$a] characterAtIndex:0]
2)惟一的缺點就是不能建立新函數... 這意味着不能建立新的類,block,函數,有虛擬函數的 C++ 類等等。框架
【經常使用命令】
1)爲了調試 viewiview
2)爲了看結構
pinternals: 打印某個對象的內部結構和數據
pca: 打印 layer tree
presponder: 打印從某個對象開始的響應鏈
ptv :打印最高層級的 tableview
3)查找
4)刷新
【待挖掘的命令】
查看幫助 (lldb) help
查看某語句幫助 (lldb) help border
1)控制檯中的 step into\step over\step out按鈕
2)xcode-symbolic breakpoint
設置條件、函數和 action(斷點行爲,每次斷點到此處時運行的命令)
3)exception breakpoint
反編譯:http://www.hopperapp.com/
Runtime:Aspects:http://github.com/steipete/Aspects
DTrace 框架:蘋果新發布的活動追蹤 API
步驟:
復現問題-斷點+lldb+method swizzling 縮小範圍(探查手段,包括 Instruments)-分析如何發生-解決方案
向蘋果反饋 bug: http://www.quickradar.com/
與調試器共舞 - LLDB 的華爾茲
1.一篇很讚的ios視圖bug調試案例,技術和方法都值得借鑑~http://www.cocoachina.com/ios/20150330/11435.html
2.ios ui調試 http://www.cocoachina.com/ios/20141224/10748.html
3.ios中的crash日誌捕獲原理及實現詳解http://www.cnblogs.com/alario/archive/2012/03/28/2421574.html
4.ios應用崩潰日誌分析http://www.cocoachina.com/applenews/devnews/2013/0725/6677.html
5.高級技巧:【iOS/Mac OS】程序崩在objc_msgSend(),怎麼辦?http://blog.csdn.net/horkychen/article/details/8015109