Xcode LLDB Debug 教程(二)

閑言少敘,直入正題。

開胃小菜--簡單的斷點調(diào)試

在xcode中打開一個app,在想要break的行號上單擊,即可生成一個深色的箭頭標(biāo)識--斷點。如下圖,在viewDidLoad:中設(shè)置了斷點。運行app,等待。。。就可以看到xcode在斷點處進入調(diào)試模式,現(xiàn)在讓我們把視線移到xcode右下角的控制臺,有木有看到(lldb)這樣一行,鼠標(biāo)移到此行,輸入po self.view回車

po(print object)是LLDB的一個命令,其主要功能是輸出objective-c中對象(objects)的信息,與之相似的另外一個命令是 p(print),其主要功能是輸出原生類型(boolean、integer、float、etc)的信息。

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

你以前怎么驗證是不是某個變量的值導(dǎo)致整段程序不能正常工作?修改代碼中的變量的值,然后cmd+r重新啟動app?現(xiàn)在你不需要這么做了,只需要設(shè)置一個斷點,當(dāng)程序在這進入調(diào)試模式后,使用expr命令即可在運行時修改變量的值。

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

首先設(shè)置好斷點,如下圖所示:


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

expr username = @"username"
expr password = @"badpassword"

控制臺會返回以下信息

(NSString *) 0 = 0x3d3504c4 @"username" (NSString *)1 = 0x1d18ef60 @"badpassword"

現(xiàn)在跳出斷點,執(zhí)行斷點之后的兩條輸出語句,控制臺會有以下輸出

(0x1c59aae0) A line for the breakpoint
(0x1c59aae0) Username and Password after: username:badpassword

看到看吧,我們在運行時修改了變量的值,事情還可以變的更簡單一些,我們可以編輯斷點,讓它自動填充需要的修改的變量的值,并且可以選擇在此斷點處不進入斷點模式,僅僅修改指定變量的值,然后自動執(zhí)行后續(xù)代碼。

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

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

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

接下來單擊斷點,使其處于禁用狀態(tài),現(xiàn)在箭頭的顏色應(yīng)該是淺藍色的,重新運行app,你會發(fā)現(xiàn)username和password的值沒有在運行時被改變了。

技巧二:設(shè)置斷點觸發(fā)條件

斷點的另外一個重要作用,是可以設(shè)置觸發(fā)斷點生效的條件,這樣我們就可以在運行時針對特定的數(shù)據(jù)進行分析,觀察app是否運行在正確的軌道上。如下圖:


通過這行語句,我們告訴編譯器:當(dāng)item中ID等于93306時,此斷點生效,進入斷點調(diào)試模式。

技巧三:格式化輸出數(shù)據(jù)

如果你厭倦了代碼里無窮無盡的NSLog,幸運的是我們可以在編輯斷點使其輸出格式化字符串就像平常編碼時一樣。不過有一點需要注意,平常編碼時可能會使用NSString‘s stringWithFormat:輸出格式化字符串,不過這個方法貌似在斷點中木有效果,你需要使用alloc/init形式的方法,如下:

運行app,就能在控制臺看到想要的輸出啦!

簡單!強大!這就是LLDB給你的選擇,從此代碼里可以不用再有NSLog滿天飛的情況了,代碼變得更干凈了,心情變得更愉悅了!

LLDB還有很多強大的地方,本教程只不過揭開了它的面紗,即便如此,仍讓我們沉醉不已。

如此你有讓xcode中debug變的更輕松加簡單的方法,請在評論中盡情的分享!

轉(zhuǎn)載自:這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • [轉(zhuǎn)]淺談LLDB調(diào)試器文章來源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,735評論 2 6
  • 轉(zhuǎn)載 與調(diào)試器共舞 - LLDB 的華爾茲: https://objccn.io/issue-19-2/ 推薦:i...
    F麥子閱讀 3,459評論 0 10
  • 隨著Xcode 5的發(fā)布,LLDB調(diào)試器已經(jīng)取代了GDB,成為了Xcode工程中默認的調(diào)試器。它與LLVM編譯器一...
    隨風(fēng)飄蕩的小逗逼閱讀 1,462評論 0 0
  • 與調(diào)試器共舞 - LLDB 的華爾茲 nangege 2014/12/19 你是否曾經(jīng)苦惱于理解你的代碼,而去嘗試...
    McDan閱讀 952評論 0 0
  • 你是否曾經(jīng)苦惱于理解你的代碼,而去嘗試打印一個變量的值? NSLog(@"%@", whatIsInsideThi...
    木易林1閱讀 1,043評論 0 4

友情鏈接更多精彩內(nèi)容