Xcode调试命令大全 (LLDB Cheatsheet)
這是一個LLDB的常用命令表, 涵蓋了平時Debug時用到的所有命令,在開發中能夠幫助你更快的定位和調試bug
Getting help(獲取幫助)
(lldb) help 復制代碼列出所有的命令和別名
(lldb) help po 復制代碼獲取po命令的幫助文檔
(lldb) help break set 復制代碼獲取break set子命令的幫助文檔
(lldb) apropos step-in 復制代碼搜索幫助文檔中包含了step-in的命令
Finding Code(搜索代碼)
(lldb) image lookup -rn UIAlertController 復制代碼查看所有包含了UIAlertController并且被編譯或運行的代碼
(lldb) image lookup -rn (?i)hosturl 復制代碼查看所有包含了hosturl的代碼,并且不區分大小寫
(lldb) image lookup -rn 'UIViewController\ set\w+:\]' 復制代碼查看UIViewController中被實現或是重寫所有的屬性的setter方法
(lldb) image lookup -rn . Security 復制代碼查看所有位于Security模塊的代碼
(lldb) image lookup -s mmap 復制代碼查看標識為mmap的代碼
Breakpoints(斷點)
(lldb) b viewDidLoad 復制代碼創建一個斷點,斷在所有的viewDidLoad方法中(Swift/Objective-c都有)
(lldb) b setAlpha: 復制代碼在oc的setAlpha:方法或是oc的alpha屬性的setter方法中創建一個斷點
(lldb) b -[CustomeViewControllerSubclass viewDidLoad] 復制代碼在OC的[CustomeViewControllerSubclass viewDidLoad]中設置一個斷點
(lldb) rbreak CustomViewControllerSubclass.viewDidLoad 復制代碼創建一個正則斷點,匹配OC和Swift中類CustomViewControllerSubclass的viewDidLoad方法,包括OC中的[CustomeViewControllerSubclass.viewDidLoad]或是Swfit中的ModuleName.CustomeViewControllerSubclass.viewDidLoad() -> ().
(lldb) breakpoint delete 復制代碼刪除所有的斷點
(lldb) breakpoint delete 2 復制代碼刪除id為2的斷點
(lldb) breakpoint list 復制代碼列出所有的斷點及其id
(lldb) rbreak viewDid 復制代碼創建一個正則斷點匹配.*viewDid.*
(lldb) rbreak viewDid -s SwiftRadio 復制代碼在模塊SwfitRadio中創建一個正則斷點匹配.*viewDid.*,
(lldb) rbreak viewDid(Appear|Disappear) -s SwiftHN 復制代碼在Swift模塊的viewDidAppear和viewDidDisappera中創建一個斷點
(lldb) rb "\-\[UIViewController\ set" -s UIKit 復制代碼在UIKit模塊中創建一個斷點,斷在OC中所有包含了[UIViewController set的方法里
(lldb) rb . -s SwiftHN -o 復制代碼在SwiftHN模塊中的所有方法中創建斷點, 但是只要有一個斷點被觸發,就刪除所有的斷點
(lldb) rb . -f ViewController.m 復制代碼創建一個斷點,斷在ViewController.m中的所有方法里面
Expressions(表達式)
(lldb) po "hello, debugger" 復制代碼打印hello, debugger
(lldb) expression -lobjc -O -- [UIApplication sharedApplication] 復制代碼打印UIApplication的實例在OC環境下
(lldb) expression -lswift -O -- UIApplication.shared 復制代碼打印UIApplication的實例在Swift環境下
(lldb) b getenv (lldb) expression -i0 -- getenv("HOME") 復制代碼創建一個斷點在getenv, 然后執行getenv方法。程序將會斷在getenv方法執行的地方
(lldb) expression -u0 -O -- [UIApplication test] 復制代碼執行方法[UIApplication test],如果此方法導致了應用崩潰了,不展開調用棧
(lldb) expression -p -- NSString *globalString = [NSString stringWithUTF8String: "Hello, Debugger"]; (lldb) po globalString Hello, Debugger 復制代碼聲明一個全局的字符串變量globalString
(lldb) expression -g -O -lobjc -- [NSObject new] 復制代碼解析[NSObject new]在OC中的表達
Stepping(步進)
(lldb) thread return false 復制代碼在當前代碼提前返回 false
(lldb) thread step-in 復制代碼執行下一行代碼
(lldb) thread step-over 復制代碼執行下一個方法
(lldb) thread step-out 復制代碼步出當前方法
(lldb) thread step-inst 復制代碼如果執行一個方法就步進,否者就進入命令集
GDB formatting (GDB調試器格式化)
(lldb) p/x 128 復制代碼輸出數據的16進制格式
(lldb) p/d 128 復制代碼輸出數據的10進制格式
(lldb) p/t 128 復制代碼輸出數據的2進制格式
(lldb) p/a 128 復制代碼將數據作為地址輸出
(lldb) x/gx 0x000000010fff6c40 復制代碼從地址0x000000010fff6c40中獲取數據并以8字節顯示
(lldb) x/wx 0x000000010fff6c40 復制代碼從地址0x000000010fff6c40中獲取數據并以4字節顯示
Memory (內存)
(lldb) memory read 0x000000010fff6c40 復制代碼讀取地址0x000000010fff6c40的內存
(lldb) po id $d = [NSData dataWithContentsOfFile:@"..."] (lldb) mem read `(uintptr_t)[$d bytes]` `(uintptr_t)[$d bytes] + (uintptr_t)[$d length]` -r -b -o /tmp/file 復制代碼從遠程文件中獲取一個實例,然后寫入到你電腦中的/tmp/file中去
Registers & assembly (寄存器和匯編)
(lldb) register read -a 復制代碼顯示系統中所有的寄存器
(lldb) register read rdi rsi 復制代碼讀取寄存器rdi和rsi的數據
(lldb) register write rsi 0x0 復制代碼設置寄存器rsi的數據為 0x0
(lldb) disassemble 復制代碼顯示你當前的暫停方法的匯編指令
(lldb) disassemble -n '-[UIViewController setTitle:]' 復制代碼解析OC中的[UIViewController setTitle:]方法
(lldb) disassemble -a 0x000000010b8d972d 復制代碼解析一個方法,此方法包含地址0x000000010b8d972d
Modules (模塊)
(lldb) image list 復制代碼列出當前進程中加載的所有模塊的信息
(lldb) image list -b 復制代碼列出當前進程中加載的所有模塊的名字
(lldb) process load /Path/To/Module.framework/Module 復制代碼在當前進程中加載本地模塊
總結
以上是生活随笔為你收集整理的Xcode调试命令大全 (LLDB Cheatsheet)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解JVM原理之编译openjdk7
- 下一篇: 创建一个framework