LLDB 命令和調(diào)試(一)

LLDB 命令和調(diào)試(一)

為什么要學(xué)習(xí) LLDB 調(diào)試

對于我們程序員來說,構(gòu)建調(diào)試幾乎是每天必做的工作什黑。 你是否遇到過下列情況?

  1. 想打印對象的 description 來追蹤對象.
  2. 調(diào)試界面的時候想改變某個 view 的顏色以便查看界面布局.
  3. 有些代碼在某些特定條件下才能滿足,但程序運(yùn)行時未必達(dá)到這個條件.

此時我們一般會默默的按下 Command + . , 增加一段代碼, NSLog(...) , view.backgroundColor = [UIColor redColor] 等等践付,再次按下 Command + r 查看運(yùn)行狀態(tài), 運(yùn)氣好我們能順利的達(dá)到目的廷支,運(yùn)氣不好就要重復(fù)這個步驟幾次频鉴,而且調(diào)試之后還要默默刪掉。一天下來腰酸背痛手抽筋... , 來放棄這種重復(fù)的重體力勞動吧, 我們來學(xué)一個新技能 LLDB 調(diào)試 恋拍,學(xué)會它之后你就像會了左右互搏, 雙劍合璧, 九陰真經(jīng), 玉女素心劍法... 咳咳 , 扯遠(yuǎn)了我們言歸正傳垛孔。

什么是LLDB

官方說明 http://lldb.llvm.org/index.html

LLDB is a next generation, high-performance debugger. It is built as a set of reusable components which highly leverage existing libraries in the larger LLVM Project, such as the Clang expression parser and LLVM disassembler.

LLDB is the default debugger in Xcode on Mac OS X and supports debugging C, Objective-C and C++ on the desktop and iOS devices and simulator.

....

Wikipedia https://en.wikipedia.org/wiki/LLDB_(debugger)

Current state

Although LLDB is in early development, it is mature enough to support basic debugging of programs writtenten in C, Objective-C, C++ and Swift.

LLDB is known to work on OS X, Linux, FreeBSD, and Windows[2] and supports i386, x86-64 and ARM instruction sets.[3] It is used as a default debugger for Xcode 4.3 and later versions

由以上資料可知,LLDB 是下一代高性能的調(diào)試器施敢,現(xiàn)在已經(jīng)支持在多個平臺運(yùn)行周荐,支持 C, C++, Objective-C,Swift僵娃。從 LLVM 編譯器語言無關(guān)的特性來看概作,以后有可能會支持更多的語言。

Xcode 從4.3版本開始就集成該調(diào)試器了默怨,現(xiàn)在更是變成了默認(rèn)選項(xiàng)讯榕。可以簡單的認(rèn)為 LLDB 的調(diào)試命令是 Xcode 可視化調(diào)試的底層支撐匙睹,所以這樣類似九陰真經(jīng)的東西愚屁,我們還是有必要了解一下的。

Preview

首先讓我們先預(yù)覽以下我們學(xué)完之后可以做什么痕檬,例如我們有下面這樣一個例子:當(dāng)按鈕按下時霎槐,隨機(jī)生成r、g谆棺、b 值, 當(dāng) r 為奇數(shù)的時候生成 view栽燕,并使用 r,g,b 的值設(shè)置了一個 view 的 frame, 并在每次點(diǎn)擊的時候都更改 view 的 tintColor 屬性罕袋。

LLDB_1-w1000

現(xiàn)有如下需求,我們需要在調(diào)試的時候知道:

  • 按鈕按下幾次的時候創(chuàng)建了 view
  • 被我們創(chuàng)建的 view 有多大
  • 當(dāng)前 view.tintColor 值是多少

這時候我們只要在如圖位置打兩個斷點(diǎn)


LLDB_1_2-w1000

按下 Command + E + LeftClick 對斷點(diǎn)進(jìn)行如下編輯

LLDB_1_3-w1000

LLDB_1_4-w1000

Command + R 運(yùn)行碍岔,按幾次按鈕來觸發(fā)斷點(diǎn)浴讯,我們能看到 Output窗口正輸出按下的次數(shù),第一個斷點(diǎn)并不觸發(fā)蔼啦,當(dāng) maskView 創(chuàng)建成功時第二個斷點(diǎn)被觸發(fā)榆纽,此時 Output 輸出了按下次數(shù) $runnumber, frame, tintColor。


(int) $0 = 0
(int) $runnumber = 1
maskView frame is {{0, 197}, {116, 72}}, tint color is UIDeviceRGBColorSpace 0.772549 0.454902 0.282353 1

至此調(diào)試結(jié)束捏肢,是不是感覺很簡單奈籽,但如果我們不用 LLDB 命令調(diào)試,我們至少要進(jìn)行以下幾個步驟:

  • 要在全局聲明一個變量來記錄按下次數(shù)鸵赫。
  • 由于 tintColor 屬性變量在調(diào)試窗口不可見衣屏,要添加一個 NSLog 打印 tintColor 的值。
  • 調(diào)試之后我們要刪除添加添加代碼辩棒。

而使用 LLDB 命令與 Xcode 可視化共同協(xié)作之后狼忱,調(diào)試變的很靈活,我們可以

  • 使用 Condition 中修改觸發(fā)條件
  • 使用 Ingore 來調(diào)整斷點(diǎn)忽略次數(shù)
  • 使用 Action 添加命令一睁,進(jìn)行變量的聲明钻弄,計(jì)算,輸出等者吁。
  • 使用 添加編輯斷點(diǎn)的方法窘俺,替代添加、編輯測試代碼复凳。
  • 使用 禁用瘤泪、刪除斷點(diǎn)的方法代替,刪除測試代碼染坯,有效防止臟代碼的發(fā)生均芽。

怎么樣心動了沒,從下一節(jié)開始单鹿,讓我們一起來學(xué)習(xí) LLDB 調(diào)試命令吧~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掀宋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子仲锄,更是在濱河造成了極大的恐慌劲妙,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件儒喊,死亡現(xiàn)場離奇詭異镣奋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)怀愧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門侨颈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來余赢,“玉大人,你說我怎么就攤上這事哈垢∑奁猓” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵耘分,是天一觀的道長举塔。 經(jīng)常有香客問我,道長求泰,這世上最難降的妖魔是什么央渣? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮渴频,結(jié)果婚禮上芽丹,老公的妹妹穿的比我還像新娘。我一直安慰自己枉氮,他們只是感情好志衍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著聊替,像睡著了一般。 火紅的嫁衣襯著肌膚如雪培廓。 梳的紋絲不亂的頭發(fā)上惹悄,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音肩钠,去河邊找鬼泣港。 笑死,一個胖子當(dāng)著我的面吹牛价匠,可吹牛的內(nèi)容都是我干的当纱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼踩窖,長吁一口氣:“原來是場噩夢啊……” “哼坡氯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起洋腮,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤箫柳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啥供,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悯恍,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年伙狐,在試婚紗的時候發(fā)現(xiàn)自己被綠了涮毫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞬欧。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖罢防,靈堂內(nèi)的尸體忽然破棺而出黍判,到底是詐尸還是另有隱情,我是刑警寧澤篙梢,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布顷帖,位于F島的核電站,受9級特大地震影響渤滞,放射性物質(zhì)發(fā)生泄漏贬墩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一妄呕、第九天 我趴在偏房一處隱蔽的房頂上張望陶舞。 院中可真熱鬧,春花似錦绪励、人聲如沸肿孵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽停做。三九已至,卻和暖如春大莫,著一層夾襖步出監(jiān)牢的瞬間蛉腌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工只厘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烙丛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓羔味,卻偏偏與公主長得像河咽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赋元,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • LLDB的Xcode默認(rèn)的調(diào)試器忘蟹,它與LLVM編譯器一起,帶給我們更豐富的流程控制和數(shù)據(jù)檢測的調(diào)試功能们陆。平時用Xc...
    CoderSC閱讀 1,355評論 0 2
  • [轉(zhuǎn)]淺談LLDB調(diào)試器文章來源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,498評論 2 6
  • 你是否曾經(jīng)苦惱于理解你的代碼寒瓦,而去嘗試打印一個變量的值? NSLog(@"%@", whatIsInsideThi...
    木易林1閱讀 955評論 0 4
  • 你是否曾經(jīng)苦惱于理解你的代碼坪仇,而去嘗試打印一個變量的值杂腰? NSLog(@"%@", whatIsInsideThi...
    paraneaeee閱讀 1,192評論 0 7
  • 轉(zhuǎn)載 與調(diào)試器共舞 - LLDB 的華爾茲: https://objccn.io/issue-19-2/ 推薦:i...
    F麥子閱讀 3,332評論 0 10