Xcode高級調試技巧和竅門

參考資料:Advanced Debugging with Xcode and LLDB 2019.4.22

高級調試技巧和竅門

1paused in the debug 調試停止在新的tab上,新的tab名稱為Debug

設置Pauses.png

2)使用lldb查看對象和更改對象值

po

expression

3)使用breakpoint修改對象值,不用每次在lldb中輸入

使用breakpoint修改對象值.png

4)Symbolic Breakpoint

Symbolic Breakpoint.png

未解析出來.jpg

編譯可能就解析出來了,如果編譯都沒有解析出來,運行下。

5)斷點在匯編代碼里,查看參數

$arg1 對應第一個參數

po $arg1

$arg2 對應第二個參數:方法名

po (SEL)$arg2

6)breakpoint set —one-shot true -name “[UILabel setText:]”

—one-shot 一旦觸發后就會刪除

7)移動指令指針

第一種方式:界面上直接拖動

第二種方式:breakpoint里Action設置 thread jump —by 1 跳過一行

8)watch變量:變量每次改變的時候斷住

watch變量.png
watch變量.jpg

9)打印視圖層級結構

po self.view recursiveDescription()

Swift會報錯,原因:recursiveDescription僅用于調試目的,它不是公共API的一部分,因此也不會被Swift掃描,Swift是一種嚴格的語言,不允許你調用尚未嚴格定義的函數,然而OC不同,在OC世界中代碼可以自由放縱的運行,你可以做任何你想做的事。

expression -l objc -O — [self.view recursiveDescription]

并不湊效,原因:這個表達式將為OC編譯創建一個臨時表達式上下文,并且它不會繼承Swift框架中的所有變量,

expression -l objc -O — [self.view recursiveDescription]

有效,反引號想預處理器一樣,它表示先評估其在當前幀中的內容,并插入結果,然后我們可以評估其余部分。

告訴調試器使用OC語法來評估表達式

expression -l objc 這表明即將給expression命令一段OC代碼,即使你處于Swift框架中。

**10) 給命令設置別名 **

command alias poc expression -l objc -O —

poc = expression -l objc -O —

11)Swift通過地址打印對象并返回對象

po unsafeBitCast(地址, to:類型) 返回對象

12)[CATransaction flush]刷新界面

13)在LLDB中使用python腳本

怎樣在lldb中使用python腳本:

第一種方法:編輯.lldbinit文件

vim ~/.lldbinit

編輯.lldbinit文件.jpg

第二種:在lldb中直接導入py腳本

command script import ~/nudge.py

14)Debug模式下 展示被裁剪視圖、展示約束

展示被裁剪視圖、展示約束.jpg

15)多個根視圖, popover可能也作為一個根視圖

16)copy視圖元素,在lldlb中直接paste

17)查看constraint生成源起,需要開啟Malloc Stack,選擇類型:All Allocation and Free History

開啟Malloc Stack.jpg
生成源起.jpg

總結:

總結.jpg
總結.jpg
總結.jpg
總結.jpg
總結.jpg
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • [轉]淺談LLDB調試器文章來源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,555評論 2 6
  • 相信大家肯定都有過為了調試而添加打印變量,或者使用直接常量代替函數調用結果,或者更改判斷條件以進入某特定分支的調試...
    縱橫而樂閱讀 2,002評論 0 3
  • 你是否曾經苦惱于理解你的代碼,而去嘗試打印一個變量的值? NSLog(@"%@", whatIsInsideThi...
    paraneaeee閱讀 1,214評論 0 7
  • 你是否曾經苦惱于理解你的代碼,而去嘗試打印一個變量的值? NSLog(@"%@", whatIsInsideThi...
    F麥子閱讀 1,259評論 1 2
  • 你是否曾經苦惱于理解你的代碼,而去嘗試打印一個變量的值? NSLog(@"%@", whatIsInsideThi...
    木易林1閱讀 965評論 0 4