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ì)去查找成員變量纷妆。