xcode 斷點調試

lldb 常用命令 

po(print-object)+ 對象

p(print)+ 基本數據類型 int之類

bt 打印最後一次調用堆棧

expr 動態修改變量

技巧一:運行時修改變量的值

你以前怎麼驗證是不是某個變量的值導致整段程序不能正常工作?修改代碼中的變量的值,然後cmd+r重新啓動app?現在你不需要這麼做了,只需要設置一個斷點,當程序在這進入調試模式後,使用expr命令即可在運行時修改變量的值。

假如有一個loginWithUsername:方法,需要兩個參數:username,password。

首先設置好斷點,如下圖所示:

運行app,進入斷點模式後,在(lldb)後輸入

1 expr username = @"username"
2 expr password = @"badpassword"
控制檯會返回以下信息


1 (NSString *) $0 = 0x3d3504c4 @"username"
2 (NSString *) $1 = 0x1d18ef60 @"badpassword"
現在跳出斷點,執行斷點之後的兩條輸出語句,控制檯會有以下輸出


1 (0x1c59aae0) A line for the breakpoint
2 (0x1c59aae0) Username and Password after: username:badpassword
看到看吧,我們在運行時修改了變量的值,事情還可以變的更簡單一些,我們可以編輯斷點,讓它自動填充需要的修改的變量的值,並且可以選擇在此斷點處不進入斷點模式,僅僅修改指定變量的值,然後自動執行後續代碼。


右擊斷點選擇“Edit Breakpoint...”(或者按住cmd+option,單擊斷點),然後如下圖所示設置斷點


注意選中了最後一行(“Automatically continue after evaluating”)的選擇框,這就保證運行到這個斷點的時,填充變量的值,然後繼續運行,並不在此處斷點進入調試模式。

運行app,你會得到和上述手動設置變量的值一樣的輸出。

接下來單擊斷點,使其處於禁用狀態,現在箭頭的顏色應該是淺藍色的,重新運行app,你會發現username和password的值沒有在運行時被改變了。


另外斷點設置中 勾選automatically continue after evaluating可以在斷點出做完相應的事情而不停住(例如使用lldb命令輸出或者修改變量值)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章