iOS開發(fā)中實用的lldb命令

p & po

ppo實際都是expression命令,pe --(e就是expression的簡寫)的別名,poe -o --的簡寫速妖。

p用于執(zhí)行一段表達式虱颗,如p button.backgroundColor = [UIColor blueColor];用在下面的情況沥匈,原本是紅色的按鈕,會變成藍色

    UIButton *button = [[UIButton alloc] initWithFrame:(CGRectMake(30, 100, 100, 30))];
    button.backgroundColor = [UIColor redColor];
    [self.view addSubview:button];

這個的好處就是可以在運行之后忘渔,我們還可以操控變量的值的來配合調(diào)試高帖。比如有些流程會根據(jù)值不同,走不同的代碼畦粮,用p命令就可以在運行后繼續(xù)修改調(diào)試散址。

po用來輸出一個指針指向的對象的值。

(lldb) p button
(UIButton *) $1 = 0x00007fb39c50c1f0
(lldb) po button
<UIButton: 0x7fb39c50c1f0; frame = (30 100; 100 30); opaque = NO; layer = <CALayer: 0x608000031a60>>

比如對于一個按鈕宣赔,使用p命令预麸,輸出的是指針的數(shù)據(jù),也就是它執(zhí)行那個內(nèi)存的地址儒将,而我們實際需要的信息在指向的對象里吏祸,用po就可以直接輸出對象信息。

thread backtrace 或 bt

可以用來顯示當(dāng)前的方法調(diào)用棧信息钩蚊。雖然在Xcode里可以查看贡翘,但操作可能沒有在這里來的快捷。

(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
  * frame #0: 0x0000000107df7562 TestDemo`-[ViewController viewDidLoad](self=0x00007fb39c405600, _cmd="viewDidLoad") at ViewController.m:28
    frame #1: 0x0000000108f26cca UIKit`-[UIViewController loadViewIfRequired] + 1235
    frame #2: 0x0000000108f2710a UIKit`-[UIViewController view] + 27
    frame #3: 0x0000000108def63a UIKit`-[UIWindow addRootViewControllerViewIfPossible] + 65
    frame #4: 0x0000000108defd20 UIKit`-[UIWindow _setHidden:forced:] + 294
    frame #5: 0x0000000108e02b6e UIKit`-[UIWindow makeKeyAndVisible] + 42
    frame #6: 0x0000000108d7c31f UIKit`-[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 4346
    frame #7: 0x0000000108d82584 UIKit`-[UIApplication _runWithMainScene:transitionContext:completion:] + 1709
    frame #8: 0x0000000108d7f793 UIKit`-[UIApplication workspaceDidEndTransaction:] + 182
    frame #9: 0x000000010bfc35f6 FrontBoardServices`__FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24
    frame #10: 0x000000010bfc346d FrontBoardServices`-[FBSSerialQueue _performNext] + 186
    frame #11: 0x000000010bfc37f6 FrontBoardServices`-[FBSSerialQueue _performNextFromRunLoopSource] + 45
    frame #12: 0x0000000108906c01 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #13: 0x00000001088ec0cf CoreFoundation`__CFRunLoopDoSources0 + 527
    frame #14: 0x00000001088eb5ff CoreFoundation`__CFRunLoopRun + 911
    frame #15: 0x00000001088eb016 CoreFoundation`CFRunLoopRunSpecific + 406
    frame #16: 0x0000000108d7e02f UIKit`-[UIApplication _run] + 468
    frame #17: 0x0000000108d840d4 UIKit`UIApplicationMain + 159
    frame #18: 0x0000000107df79cf TestDemo`main(argc=1, argv=0x00007fff57e085c0) at main.m:14
    frame #19: 0x000000010b85865d libdyld.dylib`start + 1
(lldb) 

watchpoint

這個斷點類型沒法通過界面添加而且很有用砰逻。使用watchpoint可以用來觀察一個變量或者地址鸣驱,只要變量發(fā)生變化就觸發(fā)斷點。

有些時候蝠咆,我們會發(fā)現(xiàn)某個對象的值和我們預(yù)期的不一樣踊东,可是又不知道是哪個環(huán)節(jié)修改了這個值北滥,如果一個個的查會特別麻煩。而有了watchpoint事情就簡單了闸翅。

但是它只能觀察這個指針本身再芋,不能指針指向的對象的變化,所以用處大大受限缎脾。比如watchpoint set variable button,那么:button.backgroundColor = [UIColor blackColor];不會觸發(fā)watchpoint祝闻,而button = nil;會變。

2017.6.8更新


1遗菠、 可以使用內(nèi)存直接打印联喘,比如輸出了一個按鈕:

Printing description of $18:
<UIButton: 0x7fdb44d16dc0; frame = (100 60; 100 40); opaque = NO; layer = <CALayer: 0x600000037140>>

這個是使用Debug View Hierarchy查看的時候,用鼠標(biāo)操縱打印的辙纬。如果你想看UIButton內(nèi)部的其他屬性怎么辦豁遭?比如查看enabled屬性。

(lldb) po [0x7fdb44d16dc0 isEnabled]
0x0000000000000101

使用po + 執(zhí)行方法的形式贺拣,因為enabled屬性的getter方法是isEnabled,所以用了isEnabled蓖谢,而不是enabled

2譬涡、 使用p/po命令來聲明一個變量:

Printing description of $9:
<UIButton: 0x7feadc520090; frame = (125 0; 125 40); opaque = NO; tag = 1001; layer = <CALayer:0x60000023aec0>>

(lldb) po id $myButton = [0x7feadc520090 self]

直接等于內(nèi)存地址是不行的闪幽,所以搞了個self方法把對象返回。注意聲明變量的時候涡匀,前面是帶了一個符號$的,使用的時候也需要:

(lldb) po $myButton
<UIButton: 0x7feadc520090; frame = (125 0; 125 40); opaque = NO; tag = 1001; layer = <CALayer: 0x60000023aec0>>

有了這些盯腌,可以更方便的使用lldb來查看和探究對象的性質(zhì)了!陨瘩!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腕够,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舌劳,更是在濱河造成了極大的恐慌帚湘,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甚淡,死亡現(xiàn)場離奇詭異大诸,居然都是意外死亡,警方通過查閱死者的電腦和手機贯卦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門底挫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脸侥,你說我怎么就攤上這事∮澹” “怎么了睁枕?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我外遇,道長注簿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任跳仿,我火速辦了婚禮诡渴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菲语。我一直安慰自己妄辩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布山上。 她就那樣靜靜地躺著眼耀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佩憾。 梳的紋絲不亂的頭發(fā)上哮伟,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音妄帘,去河邊找鬼楞黄。 笑死,一個胖子當(dāng)著我的面吹牛抡驼,可吹牛的內(nèi)容都是我干的鬼廓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼婶恼,長吁一口氣:“原來是場噩夢啊……” “哼桑阶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勾邦,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蚣录,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后眷篇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萎河,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年蕉饼,在試婚紗的時候發(fā)現(xiàn)自己被綠了虐杯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡昧港,死狀恐怖擎椰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情创肥,我是刑警寧澤达舒,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布值朋,位于F島的核電站,受9級特大地震影響巩搏,放射性物質(zhì)發(fā)生泄漏昨登。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一贯底、第九天 我趴在偏房一處隱蔽的房頂上張望丰辣。 院中可真熱鬧,春花似錦禽捆、人聲如沸笙什。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽得湘。三九已至,卻和暖如春顿仇,著一層夾襖步出監(jiān)牢的瞬間淘正,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工臼闻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸿吆,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓述呐,卻偏偏與公主長得像惩淳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乓搬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理思犁,服務(wù)發(fā)現(xiàn),斷路器进肯,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 多線程激蹲、特別是NSOperation 和 GCD 的內(nèi)部原理。運行時機制的原理和運用場景江掩。SDWebImage的原...
    LZM輪回閱讀 2,007評論 0 12
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,140評論 30 470
  • 一学辱、expression expression命令的作用是執(zhí)行一個表達式,并將表達式返回的結(jié)果輸出环形。express...
    boundlessocean閱讀 1,037評論 0 2
  • 筍干是取春天剛出土的筍寶寶策泣,去其外殼,用清水煮軟之后抬吟,切成絲萨咕。在陽光下曬干之后,在密封包裝下火本,可以存放幾個月危队。 筍...
    Meekdai閱讀 519評論 0 0