LLDB工具- Chisel - Speed your Debugging!

Chisel is a collection of LLDB commands to assist debugging iOS apps.
Chiselfacebook團(tuán)隊(duì)的工程師用python寫的LLDB的拓展命令集合。里面的一些命令可以讓你的調(diào)試加速猛遍。

Chisel安裝

brew update
brew install chisel

Chisel常用命令

pviews

打印view層次

也許你想打印某個UIView的frame或者內(nèi)存地址姐赡,無需再使用Capture View Hierarchy, 直接使用pviews命令即刻

pviews [--up] [--depth=depth] <aView>

--up/-u: 以view為起始位置,向上打印,直到打印到window層
--depth/-d: 傳入int類型,表示打印的層數(shù),0表示沒有限制
e.g: 打印一下self.view層級:

(lldb) pviews self.view
<UIView: 0x7fee7ae1fa60; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x7fee7ae1d3c0>>
   | <UIButton: 0x7fee7ae1dd90; frame = (54 244; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7fee7ae1e300>>
   | <UIView: 0x7fee7ae1f2e0; frame = (35 312; 240 128); autoresize = RM+BM; layer = <CALayer: 0x7fee7ae1f660>>
   | <_UILayoutGuide: 0x7fee7ae1fc20; frame = (0 0; 0 0); hidden = YES; layer = <CALayer: 0x7fee7ae20030>>
   | <_UILayoutGuide: 0x7fee7ae20b30; frame = (0 0; 0 0); hidden = YES; layer = <CALayer: 0x7fee7ae1d100>>
   | <UILabel: 0x7fee7ae1d3f0; frame = (0.4 150; 58.25 20.5); text = 'aaa'; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7fee7ae1bb30>>

fvc + VC類名 = 找ViewController

fv + UI控件類名 = 找UIView

alamborder

所有帶有Ambiguous Layouts
的view立即會被渲染上紅色border

Syntax: alamborder [--color=color] [--width=width]
--color
/-c
: border的顏色翰意,參數(shù)為string類型,比如'red', 'green', 'magenta'等信柿,不設(shè)置默認(rèn)為紅色冀偶。
--width
/-w
: border的寬度,參數(shù)為CGFloat類型渔嚷,不設(shè)置默認(rèn)寬度為2进鸠。

e.g: 假設(shè)我們寫了這么一段代碼,可以明顯看出形病,我們沒有設(shè)置X軸的位置堤如。

UIView *subview = [UIView new];[self.view addSubview:subview];[subview mas_makeConstraints:^(MASConstraintMaker *make) { make.top.offset(100); make.size.equalTo(@100);}];

運(yùn)行代碼之后,在LLDB控制臺輸入alamborder

(lldb) alamborder

pinvocation

打印方法調(diào)用堆棧窒朋,僅支持x86

語法:Syntax: pinvocation [--all]
--all/-a: 表示打印所有堆棧,不設(shè)置默認(rèn)只打印當(dāng)前堆棧
說明:與bt命令類似蝗岖,不過信息比bt打印得更詳細(xì)侥猩,遺憾的是只能支持x86

e.g: 打印一下當(dāng)前堆棧

(lldb) pinvocation
frame #0: 0x000962aa TMasonry`-[ViewController viewDidLoad](self=0x7bf2d9c0, _cmd="viewDidLoad") + 234 at ViewController.m:28
NSInvocation: 0x7bf433e0
self: 0x7bf2d9c0

pkp

通過-valueForKeyPath:打印key path對應(yīng)的值。

語法: Syntax: pkp <keypath>
<keypath>: 需要打印的路徑抵赢,如self.view
說明:以前打印屬性一般都用po obj.xxx欺劳,現(xiàn)在我想用pkp obj.xxx是一個更好的選擇了,因?yàn)閜o obj.xxx是調(diào)用getter方法铅鲤,如果沒有g(shù)etter方法就無法打印了划提。pkp obj.xxx不僅會調(diào)用getter方法,沒有g(shù)etter方法還會去查找成員變量

e.g: 打印一下self.view

(lldb) pkp self.view
<UIView: 0x7fd1da52d5d0; frame = (0 0; 375 667); autoresize = W+H; layer = <CALayer: 0x7fd1da52d740>>
pivar

presponder

打印響應(yīng)鏈
語法: Syntax: presponder <startResponder>
<startResponder>: UIResponder對象邢享,響應(yīng)鏈開始位置

e.g: 打印一個tableView的響應(yīng)鏈

(lldb) presponder tableView
<UITableView: 0x7fde54810e00; frame = (0 0; 0 0); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x7fde52519ac0>; layer = <CALayer: 0x7fde5253b4c0>; contentOffset: {0, 0}; contentSize: {0, 220}>
   | <UIView: 0x7fde5255c710; frame = (0 0; 600 600); autoresize = W+H; layer = <CALayer: 0x7fde5253b300>>
   |    | <TableViewController: 0x7fde52491310>

taplog

將點(diǎn)擊的view打印出來鹏往,這個命令對于查找哪個view非常有幫助

語法:Syntax: taplog
說明:要查看的view必須能接收點(diǎn)擊事件,也就是他的userInteractionEnabled必須為YES才能被找到骇塘,UILabelUIImageView默認(rèn)userInteractionEnabled為NO伊履。

用法:我們需要先將程序暫停韩容,輸入taplog,程序會自己運(yùn)行唐瀑,這時候點(diǎn)擊你需要查看的view群凶,控制臺上就會顯示出你剛剛點(diǎn)擊的view相關(guān)信息

e.g: 我們先將程序暫停,輸入taplog

(lldb) taplog
Process 28421 resuming
程序會自己運(yùn)行哄辣,我們再點(diǎn)擊一個UIButton:
<UIButton: 0x7fe6785284e0; frame = (54 244; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7fe678528a50>>

vs

view層級中搜索view请梢,并顯示出來
語法:Syntax: vs <view>
<view> :要查找的view

說明:相比fv,vs主要用于顯示view在屏幕上的位置力穗,2個命令可以配合使用.

e.g: 假設(shè)我們要找屏幕上的一個view, 首先用fv查找UIView類型的view

(lldb) fv UIView 0x7fbcf37228d0 UIView 0x7fbcf3725e90 UIView

然后看看這2個view到底哪個是我們想要找的view

(lldb) vs 0x7fbcf3725e90

Use the following and (q) to quit.

  • (w) move to superview
  • (s) move to first subview
  • (a) move to previous sibling
  • (d) move to next sibling
  • (p) print the hierarchy
<UIView: 0x7fbcf3725e90; frame = (0 100; 100 100); layer = <CALayer: 0x7fbcf3712a40>>

輸入命令后他會幫我們在屏幕上用粉紅色標(biāo)志出來vs
view

官方參考命令列表

Command Description iOS OS X
pviews Print the recursive view description for the key window. Yes Yes
pvc Print the recursive view controller description for the key window. Yes No
visualize Open a UIImage, CGImageRef, UIView, CALayer, NSData (of an image), UIColor, CIColor, or CGColorRef in Preview.app on your Mac. Yes No
fv Find a view in the hierarchy whose class name matches the provided regex. Yes No
fvc Find a view controller in the hierarchy whose class name matches the provided regex. Yes No
show/hide Show or hide the given view or layer. You don't even have to continue the process to see the changes! Yes Yes
mask/unmask Overlay a view or layer with a transparent rectangle to visualize where it is. Yes No
border/unborder Add a border to a view or layer to visualize where it is. Yes Yes
caflush Flush the render server (equivalent to a "repaint" if no animations are in-flight). Yes Yes
bmessage Set a symbolic breakpoint on the method of a class or the method of an instance without worrying which class in the hierarchy actually implements the method. Yes Yes
wivar Set a watchpoint on an instance variable of an object. Yes Yes
presponder Print the responder chain starting from the given object. Yes Yes
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毅弧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子睛廊,更是在濱河造成了極大的恐慌形真,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件超全,死亡現(xiàn)場離奇詭異咆霜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嘶朱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蛾坯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疏遏,你說我怎么就攤上這事脉课。” “怎么了财异?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵倘零,是天一觀的道長。 經(jīng)常有香客問我戳寸,道長呈驶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任疫鹊,我火速辦了婚禮袖瞻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拆吆。我一直安慰自己聋迎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布枣耀。 她就那樣靜靜地躺著霉晕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上娄昆,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天佩微,我揣著相機(jī)與錄音,去河邊找鬼萌焰。 笑死哺眯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扒俯。 我是一名探鬼主播奶卓,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撼玄!你這毒婦竟也來了夺姑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤掌猛,失蹤者是張志新(化名)和其女友劉穎盏浙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荔茬,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡废膘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了慕蔚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丐黄。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖孔飒,靈堂內(nèi)的尸體忽然破棺而出灌闺,到底是詐尸還是另有隱情,我是刑警寧澤坏瞄,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布桂对,位于F島的核電站,受9級特大地震影響鸠匀,放射性物質(zhì)發(fā)生泄漏接校。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一狮崩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹿寻,春花似錦睦柴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春狱窘,著一層夾襖步出監(jiān)牢的瞬間杜顺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工蘸炸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躬络,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓搭儒,卻偏偏與公主長得像穷当,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子淹禾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

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