閒言少敘,直入正題。 objective-c
在xcode中打開一個app,在想要break的行號上單擊,便可生成一個深色的箭頭標識--斷點。以下圖,在viewDidLoad:中設置了斷點。 xcode
運行app,等待。。。就能夠看到xcode在斷點處進入調試模式,如今讓咱們把視線移到xcode右下角的控制檯,有木有看到(lldb)這樣一行,鼠標移到此行,輸入 app
po [self view]回車,看看控制檯上是否是多了一些view的信息,以下圖:
po(print object)是LLDB的一個命令,其主要功能是輸出objective-c中對象(objects)的信息,與之類似的另一個命令是 p(print),其主要功能是輸出原生類型(boolean、integer、float、etc)的信息。 編碼
控制檯輸入 lua
p (int)[[[self view] subviews] count]結果以下
(int) $2 = 2 spa
注意這個使用了類型轉換告知調試器應該如何處理返回值。 debug
你之前怎麼驗證是否是某個變量的值致使整段程序不能正常工做?修改代碼中的變量的值,而後cmd+r從新啓動app?如今你不須要這麼作了,只須要設置一個斷點,當程序在這進入調試模式後,使用expr命令便可在運行時修改變量的值。 3d
假若有一個loginWithUsername:方法,須要兩個參數:username,password。 調試
首先設置好斷點,以下圖所示: code
運行app,進入斷點模式後,在(lldb)後輸入
expr username = @"username" expr password = @"badpassword"控制檯會返回如下信息
(NSString *) $0 = 0x3d3504c4 @"username" (NSString *) $1 = 0x1d18ef60 @"badpassword"如今跳出斷點,執行斷點以後的兩條輸出語句,控制檯會有如下輸出
(0x1c59aae0) A line for the breakpoint (0x1c59aae0) Username and Password after: username:badpassword看到看吧,咱們在運行時修改了變量的值,事情還能夠變的更簡單一些,咱們能夠編輯斷點,讓它自動填充須要的修改的變量的值,而且能夠選擇在此斷點處不進入斷點模式,僅僅修改指定變量的值,而後自動執行後續代碼。
右擊斷點選擇「Edit Breakpoint...」(或者按住cmd+option,單擊斷點),而後以下圖所示設置斷點
注意選中了最後一行(「Automatically continue after evaluating」)的選擇框,這就保證運行到這個斷點的時,填充變量的值,而後繼續運行,並不在此處斷點進入調試模式。
運行app,你會獲得和上述手動設置變量的值同樣的輸出。
接下來單擊斷點,使其處於禁用狀態,如今箭頭的顏色應該是淺藍色的,從新運行app,你會發現username和password的值沒有在運行時被改變了。
斷點的另一個重要做用,是能夠設置觸發斷點生效的條件,這樣咱們就能夠在運行時針對特定的數據進行分析,觀察app是否運行在正確的軌道上。以下圖:
上述截圖能夠看到以下語句
(BOOL)[(NSString*)[item valueForKey:@"ID"] isEqualToString:@"93306"]經過這行語句,咱們告訴編譯器:當item中ID等於93306時,此斷點生效,進入斷點調試模式。
若是你厭倦了代碼裏無窮無盡的NSLog,幸運的是咱們能夠在編輯斷點使其輸出格式化字符串就像日常編碼時同樣。不過有一點須要注意,日常編碼時可能會使用NSString‘s stringWithFormat:輸出格式化字符串,不過這個方法貌似在斷點中木有效果,你須要使用alloc/init形式的方法,以下:
po [[NSString alloc] initWithFormat:@"Item index is: %d", index]
運行app,就能在控制檯看到想要的輸出啦!
簡單!強大!這就是LLDB給你的選擇,今後代碼裏能夠不用再有NSLog滿天飛的狀況了,代碼變得更乾淨了,心情變得更愉悅了!
LLDB還有不少強大的地方,本教程只不過揭開了它的面紗,即使如此,仍讓咱們沉醉不已。
如此你有讓xcode中debug變的更輕鬆加簡單的方法,請在評論中盡情的分享!