首先若是使用lldb,最好你要學着使用chisel來提升效率,不然你會浪費不少的時間,除非你本身會寫python腳本,本身封裝一些lldb的命令。 html
chisel的安裝是十分簡單,它是在終端經過brew安裝的,具體能夠點擊連接參考github的安裝說明,惟一須要注意的一點就是命令行安裝完以後,它會在安裝完以後顯示出chisel的安裝地址path.在執行下面的命令時候要記得替換/path/to/fblldb.py這一塊。 python
# ~/.lldbinit ... command script import /path/to/fblldb.py script fblldb.loadCommandsInDirectory('/magical/ commands/')
若是安裝成功的話,那麼你就會看到以下圖的這些命令。 git
這裏大概會有30個命令吧,我記得我第一次裝的時候沒那麼多命令的,facebook又更新了不少。其實這些封裝的命令,就是使用python封裝了一下函數而後調用。凡是這些封裝的命令,你均可以經過多個lldb命令打出來,因此若是你會使用python的話,那麼你能夠根據本身的使用習慣封裝一些經常使用的lldb命令。我使用了也有一段時間的chisel了,可是感受並非全部的命令都很經常使用,並且有寫使用的場景也不是很清楚,因此在這裏給你們普及一下,若是有謬誤,請你們及時指正。(ps:和你們說個快捷鍵,cmd+k快速清楚console的信息。) github
通常咱們使用chisel的命令的時候,咱們能夠經過 help + chisel命令,譬如 help + pvc,獲得如何具體使用這個命令,可是有時候你看了help信息也不必定就會用呢。 正則表達式
這個命令是我最常使用的命令。它可以幫助咱們看到view的層級,即便咱們並無觸發到一個斷點。操做以下: express
這個命令能夠直接給border 添加邊框顏色和邊框的寬度,使用以下: bash
border 0x79ec3140 -c green -w 2 app
border這個命令經常在咱們須要查看邊框的邊緣的問題,經常用到,並且咱們想要設置的直接在lldb中設置,徹底不須要從新寫代碼再次運行。我就是經過直接暫停程序,而且經過pviews命令找到的控件的地址,而且調用命令顯示的。當咱們不須要的時候能夠經過unborder這個命令去掉邊框。整個過程一鼓作氣。 ide
這個命令就是打印出來的一個控件(id)類型的內部結構,詳細到使人髮指!甚至是你自定義的控件中的類型,譬如這個styleView就是我自定義的,內部有個iconView的屬性,其中的值它也會打印出來。好處,大家本身琢磨吧。(ps:這個demo,我會在下一篇博客中放出來,下篇博客是說transform的。 函數
打印出一個集成於UIResponder控件的消息傳遞鏈。
這個也方便咱們瞭解消息是如何傳遞的,打印的時候是倒敘打印的。
可使用mac下的預覽app打開咱們的圖片UIImage, CGImageRef格式的圖片,甚至view和layer的圖片 。
visualize 0x79ec3140//或者變量名,此地址是id類型的
pclass能夠打印出一個對象的繼承關係。
這個命令是模擬敲擊一下屏幕,而且打印出你敲擊屏幕時候事件接收的對象。
hide命令能夠直接隱藏一個對象,移除當前遮擋的對象便於你觀察後面的對象。show命令會讓它再次顯示出來。
這個命令就是lldb添加一個斷點,譬如-viewWillAppear:這個方法,在當前控制器中你沒有實現它,可是你又想在調用它的時機觸發中斷。
Arguments:
<expression>; Type: string; Expression to set a breakpoint on, e.g. "-[MyView setFrame:]", "+[MyView awesomeClassMethod]" or "-[0xabcd1234 setFrame:]"
這個我就不解釋了,須要補充一點的是oc的方法是帶:的。
其它命令我用着並非太多,並不表明他們不經常使用。只是我用的不太好而已,並且我認爲用到是須要特殊的場景的,這個裏說幾個我感受有很大做用可是我用的又很差的。
我寫的這些關於lldb的東西只是九牛一毛,它能夠作的事情特別多,上面的參考都是我看過的比較好的lldb的知識,你們瞭解能夠經過我上面的一些網站,更加深刻的第三篇,我一時半會不會寫的,由於那個纔是真正的進階,而我還沒達到那種高度,若是你也有好的關於lldb的技巧,理解之類的,歡迎分享。