lldb常用命令

LLDB命令的語法有其通用結構,通常是以下形式的:
<command></command>[<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]</action></subcommand></subcommand>
其中:
(命令)和(子命令):LLDB調試命令的名稱。命令和子命令按層級結構來排列:一個命令對象為跟隨其的子命令對象創建一個上下文,子命令又為其子命令創建一個上下文,依此類推。

LLBD命令行的解析操作在執行命令之前完成。上面的這些元素之間通過空格來分割,如果某一元素自身含有空格,則可以使用雙引用。而如果元素中又包含雙引號,則可以使用反斜杠;或者元素使用單引號。如下所示:
(lldb) command [subcommand] -option "some \"quoted\" string"
(lldb) command [subcommand] -option 'some "quoted" string'

一般開發時候用的最多的情況應該就是打斷點,然后打印當前變量的值了吧。
打斷點的命令就不說了,反正大多數人都是直接在代碼里面添加斷點的。基本打印變量的值比較常見的就這幾個命令print、po、frame、exp。

  • print 該命令可以用來打印基本類型(int之類的),如果打印的是對象,還會打印出對象的指針地址
  • po 這個是print object命令的縮寫,僅僅是用來打印對象的值,但是用的最多
  • exp 該命令不僅有print類似的功能,而且它還能改寫對象的值,多數用在測試數據的時候修改傳入的參數。
  • frame 該命令我用的比較少,知道的僅有frame variable命令可以打印變量的值,以及frame select命令可以打印出當前的代碼幀。有興趣的可以自行查閱

不知道蘋果是不是優化了模擬器,以前使用exp self.view.backgroundColor = [UIColor greenColor]改變背景顏色的時候,還需要加exp (void)[CATransaction flush]命令才能生效,現在用的Xcode9.3,執行之后直接就改變了。

另外一個常用的命令是image命令

  • image list 可以打印出工程中使用的庫
  • image lookup --address 后面帶上崩潰的內存地址,可以具體定位到具體崩潰的代碼位置
一些好玩的方法

1、push一個控制器
首先獲取導航控制器
exp id $nvc = [[[UIApplication sharedApplication] keyWindow] rootViewController]
然后創建一個新的控制器
exp id $vc = [UIViewController new]
為新的控制器設計背景色
exp (void)[[$vc view] setBackgroundColor:[UIColor yellowColor]]
最后跳轉該控制器
exp (void)[$nvc pushViewContoller:$vc animated:YES]
(在Xcode9.3的時候,輸入完上述命令繼續運行就會直接跳轉,如果沒有,那么請在后面添加exp (void)[CATransaction flush]命令吧)

一些問題
不明類型或類型不匹配

p NSLog(@"%@",[self.view viewWithTag:1001])
error: 'NSLog' has unknown return type; cast the call to its declared return type
如果在使用LLDB命令中發現有 unknown type 的類似錯誤(多見于id類型,比如NSArray中某個值),那我們就必須顯式聲明類型。比如上面這個命令,我們得這么修改。
p (void)NSLog(@"%@",[self.view viewWithTag:1001])
這樣就能得到正確的結果了。 另外,lldb是不支持宏的,需要我們自己替換。

找不到方法

常見于輸出frame的時候。比如你可能會得到以下的錯誤信息:
po self.view.frame
error: unsupported expression with unknown type
這似乎是lldb的一個bug,無法通過點屬性訪問的方法打印framework里面的對象,但是自己在app里面定義的就可以。我們把上面的命令改動一下:
p (CGRect)[self.view frame]
就可以了

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • LLDB是個開源的內置于XCode的調試工具,這里來理一理常用用法。lldb對于命令的簡稱,是頭部匹配方式,只要不...
    小小棒棒糖閱讀 14,887評論 6 94
  • 簡介 LLDB 是新一代高性能調試器. 它是由一組可重用組件的構成, 這些組件大多是 LLVM 工程中的類庫,比如...
    O2Space_Xiu閱讀 9,143評論 0 4
  • [轉]淺談LLDB調試器文章來源于:http://www.cocoachina.com/ios/20150126/...
    loveobjc閱讀 2,572評論 2 6
  • 隨著Xcode 5的發布,LLDB調試器已經取代了GDB,成為了Xcode工程中默認的調試器。它與LLVM編譯器一...
    隨風飄蕩的小逗逼閱讀 1,420評論 0 0
  • iOS 開發中 LLDB 常用命令整理 expression(或者縮寫expr) 表達式 expression ...
    傲視蒼穹閱讀 613評論 0 4