iOS開發(fā) - lldb插件chisel的實(shí)用技巧

Xcode是自帶lldb調(diào)試器的沐鼠,大家日常開發(fā)中應(yīng)該都使用過泛烙。但是其功能較為簡單赘理。對(duì)此,facebook團(tuán)隊(duì)出了一款lldb的插件 - chisel险绘,功能極其強(qiáng)大,用了都說好。

chisel 安裝 (需安裝Homebrew)

 brew update
 
 brew install chisel 

安裝成功后會(huì)打印出路徑如: /usr/local/opt/chisel/libexec/fblldb.py
添加下述命令行到 ~/.lldbinit 文件

command script import 剛剛安裝成功后顯示的路徑隆圆,如下:

vi ~/.lldbinit

command script import /usr/local/opt/chisel/libexec/fblldb.py

假如不存在~/.lldbinit 文件
可以使用 touch ~/.lldbinit 來創(chuàng)建它漱挚,最后需要重啟Xcode插件才可以生效。

chisel 使用

chisel的指令有點(diǎn)多渺氧,我這里只列舉一些常用及實(shí)用的旨涝,其他指令大家有興趣的話可以查看chisel的官方文檔

1、pvc

作用

循環(huán)打印viewController的層級(jí)侣背,常用于查看當(dāng)前顯示的控制器是哪個(gè)控制器

2白华、ptv

作用

打印View層級(jí)中最上面的一個(gè)tableView

3、pviews

作用

循環(huán)打印view的層級(jí)

使用
以view為起點(diǎn)往上打臃纺汀:pviews -u viewAddress

以view為起點(diǎn)往下打踊⌒取:pviews viewAddress

4、taplog

作用

將點(diǎn)擊的view打印出來潮太,常用于與pactions配合使用管搪,查看控件事件響應(yīng)的方法

使用

暫停程序 -> 點(diǎn)擊控件 -> 輸入taplog,之后會(huì)打印處理點(diǎn)擊事件的控件

5铡买、pactions

作用

查看控件事件響應(yīng)的方法

taplog與pactions配合使用

查看某個(gè)控件的點(diǎn)擊事件更鲁,首先暫停程序,點(diǎn)擊某個(gè)控件

輸入:taplog

返回:<UIButton: 0x7fdcb55817e0; frame = (73.5 0; 60 60); opaque = NO; autoresize = RM+BM; tag = 12; layer = <CALayer: 0x600001cdbe00>>

輸入:pactions 0x7fdcb55817e0

返回:<AppsShareButtomView: 0x7fdcb5578a20; frame = (0 320; 320 320); autoresize = RM+BM; layer = <CALayer: 0x600001cd7280>>: clickBtn:

顯然奇钞,事件是AppsShareButtomView的clickBtn:

如果 0x7fdcb55817e0 并不是真正的事件處理者澡为,可以調(diào)用
presponder 0x7fdcb55817e0  查看他的響應(yīng)者鏈條景埃,分析是哪個(gè)響應(yīng)者去響應(yīng)事件媒至。

6、flicker

作用

將view閃爍一下拒啰,以便于查找view的位置

使用
flicker viewAddress

7蒂胞、pinternals

作用

打印一個(gè)對(duì)象內(nèi)部的成員變量

使用
如想打印當(dāng)前控制器的成員變量

輸入:pvc

返回: 
<LYNavigationController 0x1050dae00>, state: disappeared, view: <UILayoutContainerView 0x104f59b10> not in the window
  | <SettingViewController 0x104f3af20>, state: appeared, view: (view not loaded)

輸入:pinternals 0x104f3af20

返回:
(SettingViewController) $21 = {
  BaseViewController = {
    UIViewController = {
      UIResponder = {
        NSObject = {
          isa = SettingViewController
        }
      }
    }
    _hideBack = NO
    _mWidth = 0
    _mHeight = 0
    _x = 0
    _y = 0
    _viewFrame = (origin = (x = 0, y = 0), size = (width = 0, height = 0))
  }
  _syncService = 0x00000001d4010c80
  _indicatorView = 0x0000000104f8ce90
  _joinInService = 0x00000001d400ef10
  _hrVariabilityService = 0x00000001d4620900
  _autoSyncTimer = nil
}

8蛤织、caflush

作用

刷新UI界面鸿染。一般我們用LLDB語法改變UI或者設(shè)置view的顏色之后涨椒,UI并不會(huì)立即更新绽媒,我們需要使用caflush刷新界面

9是辕、show

作用

顯示一個(gè)view或者layer获三,相當(dāng)于執(zhí)行view.hidden = NO

使用
show viewAddress

10锨苏、hide

作用

隱藏一個(gè)view或者layer伞租,相當(dāng)于執(zhí)行view.hidden = YES

使用
hide viewAddress

11、pa11y

作用

打印view層級(jí)中所有的包含label的控件

使用
場景:想要找到界面上顯示"我的最愛"的控件

首先暫停程序

輸入:pa11y

返回:
UIWindow (id)[[UIApplication sharedApplication] keyWindow]
   | (UILabel 0x0000000104f073f0) 裸弦。1ojj
   | UIButton 0x0000000104f2c930
   | UserInfoCell 0x000000010508ea00
   |    | (UILabel 0x0000000104f93230) 驯击。1ojj
   | UserInfoCell 0x000000010617c200
   |    | (UILabel 0x0000000105eb88c0) 女
   | UserInfoCell 0x00000001061a6400
   |    | (UILabel 0x0000000105eb9740) 2000年01月01日
   | UserInfoCell 0x00000001061eb000
   |    | (UILabel 0x0000000105ebb870) 5,11 英尺 英寸
   | UserInfoCell 0x00000001061f3800
   |    | (UILabel 0x0000000105ebd750) 143.3 磅
   | UserInfoCell 0x00000001061f4e00
   |    | (UILabel 0x0000000105ebe310) 我的最愛
   
可以知道"我的最愛"的控件是 UILabel 0x0000000105ebe310,為了進(jìn)一步驗(yàn)證

輸入:flicker 0x0000000105ebe310

可以看到界面上"我的最愛"文字會(huì)閃爍一下,就證明找對(duì)了

12暇矫、pkp

作用

通過-valueForKeyPath:打印key path對(duì)應(yīng)的值择吊,功能比po強(qiáng)大

  • 使用po obj.xxx是調(diào)用getter方法几睛,如果沒有g(shù)etter方法就無法打印了。
  • 使用pkp obj.xxx不僅會(huì)調(diào)用getter方法囱持,沒有g(shù)etter方法還會(huì)去查找成員變量纷妆。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逊拍,一起剝皮案震驚了整個(gè)濱河市际邻,隨后出現(xiàn)的幾起案子世曾,更是在濱河造成了極大的恐慌,老刑警劉巖肿轨,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕊程,死亡現(xiàn)場離奇詭異椒袍,居然都是意外死亡藻茂,警方通過查閱死者的電腦和手機(jī)驹暑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門辨赐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來优俘,“玉大人掀序,你說我怎么就攤上這事帆焕。” “怎么了不恭?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長换吧。 經(jīng)常有香客問我,道長满着,這世上最難降的妖魔是什么贯莺? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任响驴,我火速辦了婚禮,結(jié)果婚禮上豁鲤,老公的妹妹穿的比我還像新娘琳骡。我一直安慰自己锅论,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布楣号。 她就那樣靜靜地躺著最易,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炫狱。 梳的紋絲不亂的頭發(fā)上藻懒,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音视译,去河邊找鬼嬉荆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酷含,可吹牛的內(nèi)容都是我干的鄙早。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼椅亚,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼限番!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起呀舔,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤弥虐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后媚赖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躯舔,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年省古,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丧失。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡豺妓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出布讹,到底是詐尸還是另有隱情琳拭,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布描验,位于F島的核電站白嘁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏膘流。R本人自食惡果不足惜絮缅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一鲁沥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耕魄,春花似錦画恰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至则奥,卻和暖如春考润,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背读处。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工糊治, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人档泽。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓俊戳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親馆匿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抑胎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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