iOS 調試大法

本文轉載至 http://www.jianshu.com/p/d19e19a91071

0.笨辦法html

看變量、對象?NSLog+從新編譯運行;
改某對象?改源碼+從新編譯運行;
隔離某個方法?在方法中寫 return 跳出+從新編譯運行;ios

慢!!!git

1.LLDB

改源碼+從新編譯的方式要等待時間太長,而且看起來特別不高端。試試程序員最喜歡的命令行模式——LLDB。程序員

1.1 基本經常使用命令

  • help 查詢幫助
  • print\p\po 打印對象github

    高級一點:十六進制p/x 16,二進制p/t 16 完整格式清單express

    po [[UIWindow keyWindow] recursiveDescription] 來檢查層次結構,以文本形式打印出完整的視圖層次結構
    po [[[UIWindow keyWindow] rootViewController] _printHierarchy] 來檢查視圖控制器xcode

  • expression\e 更改變量值app

  • bt 打印棧幀信息,貌似用途不大?能夠直接去看 xcode 的棧幀信息。
  • thread return 在函數開頭thread return,能夠隔離函數,僞造返回值,若非開頭用這個語句,可能形成內存泄露。

注意
1)在 LLDB 中使用變量要加$符號
p (char)[[$array objectAtIndex:$a] characterAtIndex:0]
2)惟一的缺點就是不能建立新函數... 這意味着不能建立新的類,block,函數,有虛擬函數的 C++ 類等等。框架

1.2 chisel 下載地址

【經常使用命令】
1)爲了調試 viewiview

  • border \ unborder: 畫邊界
  • mask \ unmask:給某個 view 加紅色遮罩,便於查找
  • show \ hide : 顯示、隱藏 view\layer

2)爲了看結構

  • pclass:打印某對象的類的繼承關係
  • pinternals: 打印某個對象的內部結構和數據

  • pca: 打印 layer tree

  • pvc \ pviews : 打印 vc\view 的層級樹
  • presponder: 打印從某個對象開始的響應鏈

  • ptv :打印最高層級的 tableview

  • pcells: 打印結構中最高層級的 tableview 的可見 cell

3)查找

  • fv \ fvc:用正則查找 view\vc
  • vs :遍歷查找某個 view

4)刷新

  • caflush : 更新 UI

【待挖掘的命令】

  • wivar:給對象設置觀察點
  • bmessage:非重寫方法的符號斷點
  • fa11y
  • flicker : 經過閃動查找某個 view
  • panim :判斷當前代碼是否在 uiview 動畫 block 中
  • pinvocation :打印當前調用的棧幀、接受者、參數(只支持 x86)
  • pivar
  • taplog:Log tapped view to the console.
  • visualize :Open a UIImage, CGImageRef, UIView, or CALayer in Preview.app on your Mac.

chisel commands

查看幫助 (lldb) help
查看某語句幫助 (lldb) help border

2.斷點

1)控制檯中的 step into\step over\step out按鈕
2)xcode-symbolic breakpoint
設置條件、函數和 action(斷點行爲,每次斷點到此處時運行的命令)

3)exception breakpoint

3. 工具

反編譯:http://www.hopperapp.com/
Runtime:Aspects:http://github.com/steipete/Aspects
DTrace 框架:蘋果新發布的活動追蹤 API

4. 總結

步驟:
復現問題-斷點+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

    1. pony debugger 待嘗試http://blog.csdn.net/ysy441088327/article/details/8797095
      7.xcode斷點相關高級設置(待實踐!!!)http://www.cocoachina.com/applenews/devnews/2013/0701/6514.html
相關文章
相關標籤/搜索