LLdb篇2教你使用faceBook的chisel來提高調(diào)試效率

這次真是久違的第二篇了,過年的時候一直在幫家里帶孩子,順便用webStorm這個神器重新溫習(xí)了下前端的知識。然后最近剛來北京又是重感冒,又是找房子,整個來說coding還是寫博客效率極低又苦不堪言。

首先如果使用lldb,最好你要學(xué)著使用chisel來提高效率,否則你會浪費很多的時間,除非你自己會寫python腳本,自己封裝一些lldb的命令。

安裝chisel

chisel的安裝是十分簡單,它是在終端通過brew安裝的,具體可以點擊鏈接參考github的安裝說明,唯一需要注意的一點就是命令行安裝完之后,它會在安裝完之后顯示出chisel的安裝地址path.在執(zhí)行下面的命令時候要記得替換/path/to/fblldb.py這一塊。

# ~/.lldbinit
...  
command script import /path/to/fblldb.py
script fblldb.loadCommandsInDirectory('/magical/    
commands/')

如果安裝成功的話,那么你就會看到如下圖的這些命令。

lldb help
lldb help

這里大概會有30個命令吧,我記得我第一次裝的時候沒那么多命令的,facebook又更新了很多。其實這些封裝的命令,就是使用python封裝了一下函數(shù)然后調(diào)用。凡是這些封裝的命令,你都可以通過多個lldb命令打出來,所以如果你會使用python的話,那么你可以根據(jù)自己的使用習(xí)慣封裝一些常用的lldb命令。我使用了也有一段時間的chisel了,但是感覺并不是所有的命令都很常用,而且有寫使用的場景也不是很清楚,所以在這里給大家普及一下,如果有謬誤,請大家及時指正。(ps:和大家說個快捷鍵,cmd+k快速清楚console的信息。)

一般我們使用chisel的命令的時候,我們可以通過 help + chisel命令,譬如 help + pvc,得到如何具體使用這個命令,但是有時候你看了help信息也不一定就會用呢。

image
image

pviews

這個命令是我最常使用的命令。它能夠幫助我們看到view的層級,即使我們并沒有觸發(fā)到一個斷點。操作如下:

pviews
pviews
  • 如圖我沒有設(shè)置任何斷點,只是點擊控制臺的暫停圖標(biāo),就可以呼出lldb控制臺了。然后再這里輸出pviews這個命令。
  • 然后這個命令主要可以看到當(dāng)前的view層級,如果我們寫了一個控件沒有顯示。我們就可以通過這個命令來排查。
  • 排查首先看有沒有我們添加的這個view,如button,如果內(nèi)存地址里沒有這個button,說明沒有添加到view中(沒調(diào)用addSubview方法)
  • 然后可以看到這個button的地址,我們可以看到這個button的frame屬性,根據(jù)屬性判斷是否是位置或者大小不合適。
  • 再次,我們要看是否hidden被設(shè)置成了yes,如果設(shè)置了yes的話,在打印信息中會打印出來。因為默認(rèn)view的isHidden是no,所以沒被打印。
  • 最后如果是button可以檢查下是否設(shè)置了圖片,如果是view,就可以查看下顏色是否與后面的控件一致,這就引入到了下一個命令border。

border&unborder

border
border

這個命令可以直接給border 添加邊框顏色和邊框的寬度,使用如下:

border 0x79ec3140 -c green -w 2

border這個命令常常在我們需要查看邊框的邊緣的問題,常常用到,而且我們想要設(shè)置的直接在lldb中設(shè)置,完全不需要重新寫代碼再次運行。我就是通過直接暫停程序,并且通過pviews命令找到的控件的地址,并且調(diào)用命令顯示的。當(dāng)我們不需要的時候可以通過unborder這個命令去掉邊框。整個過程一氣呵成。

pinternals

pinternals
pinternals

這個命令就是打印出來的一個控件(id)類型的內(nèi)部結(jié)構(gòu),詳細(xì)到令人發(fā)指!甚至是你自定義的控件中的類型,譬如這個styleView就是我自定義的,內(nèi)部有個iconView的屬性,其中的值它也會打印出來。好處,你們自己琢磨吧。(ps:這個demo,我會在下一篇博客中放出來,下篇博客是說transform的。

presponder

打印出一個集成于UIResponder控件的消息傳遞鏈。


presponder
presponder

這個也方便我們了解消息是如何傳遞的,打印的時候是倒敘打印的。

visualize

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

visualize 0x79ec3140//或者變量名,此地址是id類型的

pclass

pclass可以打印出一個對象的繼承關(guān)系。
pclass
pclass

taplog

這個命令是模擬敲擊一下屏幕,并且打印出你敲擊屏幕時候事件接收的對象。


image
image

hide&show

hide命令可以直接隱藏一個對象,移除當(dāng)前遮擋的對象便于你觀察后面的對象。show命令會讓它再次顯示出來。

bmessage

這個命令就是lldb添加一個斷點,譬如-viewWillAppear:這個方法,在當(dāng)前控制器中你沒有實現(xiàn)它,但是你又想在調(diào)用它的時機(jī)觸發(fā)中斷。

Arguments:
<expression>; Type: string; Expression to set a breakpoint on, e.g. "-[MyView setFrame:]", "+[MyView awesomeClassMethod]" or "-[0xabcd1234 setFrame:]"

這個我就不解釋了,需要補充一點的是oc的方法是帶的。

其他命令

其它命令我用著并不是太多,并不代表他們不常用。只是我用的不太好而已,而且我認(rèn)為用到是需要特殊的場景的,這個里說幾個我感覺有很大作用但是我用的又不好的。

  1. wivar,這個命令是加watchPoint,用的好,就相當(dāng)于使用lldb寫了kvo了。(ps:恕我沒研究明白)
  2. pvc這個命令的作用是打印出當(dāng)前的控制器層級,(ps:有時好使,有時又很壞,似魔鬼的步伐.??,沒研究明白)
  3. vsfv,fvc,這幾個命令都需要正則表達(dá)式的知識背景,因為我正則表達(dá)式從來都是百度,也沒自己真正學(xué)過。所以對我不常用,但是對那些會正則的可能會很大作用。(ps:希望你們研究出來有什么好的技巧分享下)

參考

  1. 南峰子的技術(shù)博客,工具篇:LLDB調(diào)試器
  2. Dancing in the Debugger — A Waltz with LLDB
  3. LLDB調(diào)試命令初探
  4. Xcode LLDB Debug教程

我寫的這些關(guān)于lldb的東西只是九牛一毛,它可以做的事情特別多,上面的參考都是我看過的比較好的lldb的知識,大家了解可以通過我上面的一些網(wǎng)站,更加深入的第三篇,我一時半會不會寫的,因為那個才是真正的進(jìn)階,而我還沒達(dá)到那種高度,如果你也有好的關(guān)于lldb的技巧,理解之類的,歡迎分享。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,755評論 2 371

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

  • 不玩LLDB,不知道chisel有多強(qiáng)大。chisel之于LLDB,就像iPhone之于手機(jī),前者幾乎給后者重新下...
    小笨狼閱讀 9,579評論 15 78
  • 你是否曾經(jīng)苦惱于理解你的代碼,而去嘗試打印一個變量的值? NSLog(@"%@", whatIsInsideThi...
    paraneaeee閱讀 1,202評論 0 7
  • 現(xiàn)在的社會還是比較注重工作效率的,我們寫代碼也是一樣的,如何提升編碼效率對于我們來說是非常重要的。比如給一些經(jīng)常使...
    梅慶閱讀 1,374評論 0 0
  • 與調(diào)試器共舞 - LLDB 的華爾茲 nangege 2014/12/19 你是否曾經(jīng)苦惱于理解你的代碼,而去嘗試...
    McDan閱讀 887評論 0 0
  • iOS調(diào)試之chisel Chisel 是一個 LLDB 指令集合,用戶輔助 iOS 應(yīng)用差錯。 安裝 chise...
    comst閱讀 4,629評論 0 13