Chisel常用命令總結

Chisel簡介

Chisel是Facebook開源的一款lldb調試工具绢掰,其實就是對系統(tǒng)lldb命令的封裝,開發(fā)者可以通過簡化的命令更方便的進行調試工作势木。開源地址:https://github.com/facebook/chisel

Chisel安裝

Homebrew的安裝

Chisel的安裝是通過Homebrew來安裝的,所以安裝Chisel前需要先在mac上安裝Homebrew,安裝命令很簡單:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

拷貝該命令到terminal運行即可离唬。

Chisel安裝

安裝完Homebrew后,就可按照github上介紹Chisel的安裝步驟來安裝了划鸽。

brew update
brew install chisel

安裝截圖如下:


安裝截圖

注意紅色方框中的內容输莺,大致意思是讓我們將下行的命令保存到~/.lldbinit文件中,以便Xcode啟動時去加載Chisel裸诽。
所以接下來我們就需要往~/.lldbinit中添加那一行:
在~/目錄下可能沒有.lldbinit文件嫂用,此時需要我們新建一個,并打開該文件將那一行添加到文件中:

touch .lldbinit  //新建文件
vim .lldbinit    //通過vim打開該文件

添加截圖如下:


添加截圖

添加完成后保存退出丈冬。
最后重啟Xcode嘱函,隨便打開一個項目,進入調試狀態(tài)后埂蕊,在console中輸入help命令实夹,如果出現(xiàn)以下內容,就說明Chisel安裝成功了粒梦。

Current user-defined commands:
  alamborder   -- For more information run 'help alamborder'
  alamunborder -- For more information run 'help alamunborder'
  binside      -- For more information run 'help binside'
  bmessage     -- For more information run 'help bmessage'
  border       -- For more information run 'help border'
  caflush      -- For more information run 'help caflush'
  dcomponents  -- For more information run 'help dcomponents'
  fa11y        -- For more information run 'help fa11y'
  flicker      -- For more information run 'help flicker'
  fv           -- For more information run 'help fv'
  fvc          -- For more information run 'help fvc'
  hide         -- For more information run 'help hide'
  mask         -- For more information run 'help mask'
  pa11y        -- For more information run 'help pa11y'
  pactions     -- For more information run 'help pactions'
  paltrace     -- For more information run 'help paltrace'
  panim        -- For more information run 'help panim'
  pca          -- For more information run 'help pca'
  pcells       -- For more information run 'help pcells'
  pclass       -- For more information run 'help pclass'
  pcomponents  -- For more information run 'help pcomponents'
  pcurl        -- For more information run 'help pcurl'
  pdata        -- For more information run 'help pdata'
  pdocspath    -- For more information run 'help pdocspath'
  pinternals   -- For more information run 'help pinternals'
  pinvocation  -- For more information run 'help pinvocation'
  pivar        -- For more information run 'help pivar'
  pjson        -- For more information run 'help pjson'
  pkp          -- For more information run 'help pkp'
  presponder   -- For more information run 'help presponder'
  ptv          -- For more information run 'help ptv'
  pvc          -- For more information run 'help pvc'
  pviews       -- For more information run 'help pviews'
  rcomponents  -- For more information run 'help rcomponents'
  show         -- For more information run 'help show'
  slowanim     -- For more information run 'help slowanim'
  taplog       -- For more information run 'help taplog'
  unborder     -- For more information run 'help unborder'
  unmask       -- For more information run 'help unmask'
  unslowanim   -- For more information run 'help unslowanim'
  visualize    -- For more information run 'help visualize'
  vs           -- For more information run 'help vs'
  wivar        -- For more information run 'help wivar'

Chisel常用命令的使用

pviews

該命令是最常用的命令亮航,主要是用來查看布局中view的層級關系的。


pviews

圖中command+R運行程序后匀们,點擊暫停按鈕缴淋,就可進入lldb控制臺,輸入pivews命令查看當前布局中view的層級關系。

border/unborder

這兩個命令分別是給要查看的view添加邊框和移除邊框重抖,可以在lldb下輸入help border查看具體的用法露氮,如果我要給第二個view添加一個顏色為藍色,寬度為2的邊框钟沛,之后再用unborder命令移除畔规,操作如下:


border/unborder

通過help border命令知道border的使用格式如下:

Options:
  --color/-c <color>; Type: string; A color name such as 'red', 'green',
  'magenta', etc.
  --width/-w <width>; Type: CGFloat; Desired width of border.
Syntax: border [--color=color] [--width=width] <viewOrLayer>

其中viewOrLayer表示你要修改的view的地址,我們通過pviews命令知道恨统,第二個view的地址是0x7feae2d605f0叁扫,所以我們輸入

border -c blue -w 2 0x7feae2d605f0  //添加邊框
unborder 0x7feae2d605f0   //移除邊框

注意我在輸入每個border/unborder命令時,右側模擬器第二個view的變化畜埋。
view的層級關系莫绣。

pinternals

這個命令主要是打印view的內部詳細信息,太具體了悠鞍,有需要的可以好好研究研究:

(lldb) pinternals 0x7feae2d605f0
(UIView) $22 = {
  UIResponder = {
    NSObject = {
      isa = UIView
    }
    _hasAlternateNextResponder = false
    _hasInputAssistantItem = false
  } _constraintsExceptingSubviewAutoresizingConstraints = 0x00007feae2d5cda0 @"3 objects"
  _cachedTraitCollection = nil
  _layer = 0x00007feae2d13760
  _layerRetained = nil
  _gestureInfo = nil
  _gestureRecognizers = nil
  _subviewCache = 0x00007feae2e621b0 @"1 object"
  _templateLayoutView = nil
  _charge = 0
  _tag = 0
  _viewDelegate = nil
  _backgroundColorSystemColorName = nil
  _countOfMotionEffectsInSubtree = 0
  _countOfTraitChangeRespondersInDirectSubtree = 0
  _cachedScreenScale = 0
  _retainCount = 14
  _tintAdjustmentDimmingCount = 0
  _shouldArchiveUIAppearanceTags = false
  _interactionTintColor = nil
  _layoutMarginsGuide = nil
  _minXVariable = 0x00007feae2e5f540
  _minYVariable = 0x00007feae2e64400
  _boundsWidthVariable = 0x00007feae2d0fe70
  _boundsHeightVariable = 0x00007feae2d5cf90
  _layoutEngine = 0x00007feae2e69220
  _layoutDebuggingIdentifier = nil
  _internalConstraints = 0x00007feae2d02e00
  _continuousCornerRadius = 0 _countOfFocusedAncestorTrackingViewsInSubtree = 0
  _semanticContentAttribute = 0
__presentationControllerToNotifyOnLayoutSubviews = nil
  _previewingSegueTemplateStorage = nil
  _contentSizeNotificationToken = nil
  _readableContentGuide = nil
}

visualize

可以使用mac下的預覽app打開我們的圖片UIImage, CGImageRef格式的圖片对室,甚至view和layer的圖片 。


visualize

pclass

這個可以查看view的層級關系


pclass

圖中先查看了UIView的層級關系咖祭,然后查看了一個第三方自定義的控件MMPlaceHolder的層級關系掩宜。

hide/show

這兩個命令顧名思義,就是顯示和隱藏某個指定的view么翰,話不多說牺汤,上圖(注意模擬器中第二個view的變化):


show/hide

taplog

這個命令在你點擊屏幕后,lldb打印出你敲擊屏幕時接收事件的view的信息硬鞍。


taplog

注意,我是先輸入的命令戴已,然后點擊了屏幕才打印出對應view的信息固该。

pvc

這個命令是打印當前的控制器層級,如下圖糖儡,我定義了一個UINavigationController伐坏,ViewController作為它的根控制器。


pvc

bmessage

有這么中需求握联,在當前控制器沒有實現(xiàn)某個方法(譬如:-viewWillAppear:)方法桦沉,但是我又想在該方法調用時觸發(fā)中斷,這個時候bmessage就派上用場了


bmessage

這里首先通過pvc命令查看當前控制器的層級關系金闽,其中ViewController就是當前顯示的控制器,然后通過通過controller變量指向當前控制器纯露,再給該控制器通過bmessage設置了斷點,之后讓程序繼續(xù)運行代芜,當當前控制器再次被顯示的時候埠褪,viewDidAppear:方法被觸發(fā),此時斷點就起作用了,程序就中斷了钞速。

(lldb) e id $controller=(id)0x7fe8ab72ab50 //設置controller變量指向當前ViewController
(lldb) bmessage [$controller viewDidAppear:] //給當前ViewController設置斷點
Setting a breakpoint at -[UIViewController viewDidAppear:] with condition (void*)(id)$rdi == 0x00007fe8ab72ab50
Breakpoint 1: where = UIKit`-[UIViewController viewDidAppear:], address = 0x000000010e646d12

以上是Chisel最常用的一些命令贷掖,其他的在某些特定場景也有用到,我也不是很了解渴语,所以就不敢輕易寫了苹威,以下是兩篇很好地參考資料,第二篇是第一篇的中文譯文驾凶。

<h1>參考</h1>
1牙甫、Dancing in the Debugger — A Waltz with LLDB

2、與調試器共舞 - LLDB 的華爾茲

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末狭郑,一起剝皮案震驚了整個濱河市腹暖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翰萨,老刑警劉巖脏答,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亩鬼,居然都是意外死亡殖告,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門雳锋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黄绩,“玉大人,你說我怎么就攤上這事玷过∷ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵辛蚊,是天一觀的道長粤蝎。 經常有香客問我,道長袋马,這世上最難降的妖魔是什么初澎? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮虑凛,結果婚禮上碑宴,老公的妹妹穿的比我還像新娘。我一直安慰自己桑谍,他們只是感情好延柠,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锣披,像睡著了一般捕仔。 火紅的嫁衣襯著肌膚如雪匕积。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天榜跌,我揣著相機與錄音闪唆,去河邊找鬼。 笑死钓葫,一個胖子當著我的面吹牛悄蕾,可吹牛的內容都是我干的。 我是一名探鬼主播础浮,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼帆调,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豆同?” 一聲冷哼從身側響起番刊,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎影锈,沒想到半個月后芹务,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鸭廷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年枣抱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辆床。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡佳晶,死狀恐怖,靈堂內的尸體忽然破棺而出讼载,到底是詐尸還是另有隱情轿秧,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布咨堤,位于F島的核電站菇篡,受9級特大地震影響,放射性物質發(fā)生泄漏吱型。R本人自食惡果不足惜逸贾,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一陨仅、第九天 我趴在偏房一處隱蔽的房頂上張望津滞。 院中可真熱鬧,春花似錦灼伤、人聲如沸触徐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撞鹉。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸟雏,已是汗流浹背享郊。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留孝鹊,地道東北人炊琉。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像又活,于是被迫代替她去往敵國和親苔咪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容

  • 不玩LLDB柳骄,不知道chisel有多強大团赏。chisel之于LLDB,就像iPhone之于手機耐薯,前者幾乎給后者重新下...
    小笨狼閱讀 9,559評論 15 78
  • iOS調試之chisel Chisel 是一個 LLDB 指令集合舔清,用戶輔助 iOS 應用差錯。 安裝 chise...
    comst閱讀 4,623評論 0 13
  • LLDB 是一個有著 REPL 的特性和 C++ ,Python 插件的開源調試器。LLDB 綁定在 Xcode ...
    Eric_zheng閱讀 407評論 0 0
  • 與調試器共舞 - LLDB 的華爾茲 nangege 2014/12/19 你是否曾經苦惱于理解你的代碼复斥,而去嘗試...
    McDan閱讀 881評論 0 0
  • LLDB是XCode內置的為我們開發(fā)者提供的調試工具营密,是一個有著 REPL 的特性和 C++ ,Python 插件...
    風塵子閱讀 963評論 0 2