/Library/Developer/CommandLineTools/usr/bin/lldb
Xcode中也自帶來了調試器lldb:正則表達式
/Applications/Xcode.app/Contents/Developer/usr/bin/lldb
192:~ zhoufei$ ps aux | grep /Applications zhoufei 1496 0.8 4.2 6501004 348924 ?? S 10:14下午 0:35.31 /Applications/YoudaoNote.app/Contents/MacOS/YoudaoNote zhoufei 1255 0.0 2.0 8894360 168828 ?? S 10:01下午 0:43.20 /Applications/Firefox.app/Contents/MacOS/firefox
2.開啓調試一個靜止的app程序express
//經過lldb調試器打開靜態程序 192:bin zhoufei$ lldb firefox //或者 //經過lldb調試器打開 帶參數的 靜態程序 192:bin zhoufei$ lldb firefox 11 22
3.將lldb調試器附加到一個正在運行的app程序macos
//1.先打開lldb調試器 192:bin zhoufei$ lldb //2.將調試器附加到要調試的目標可執行文件上 (lldb) process attach --name firefox Process 1255 stopped * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP frame #0: 0x00007fff7570920a libsystem_kernel.dylib`mach_msg_trap + 10 libsystem_kernel.dylib`mach_msg_trap: -> 0x7fff7570920a <+10>: retq 0x7fff7570920b <+11>: nop libsystem_kernel.dylib`mach_msg_overwrite_trap: 0x7fff7570920c <+0>: movq %rcx, %r10 0x7fff7570920f <+3>: movl $0x1000020, %eax ; imm = 0x1000020 Target 0: (firefox) stopped. Executable module set to "/Applications/Firefox.app/Contents/MacOS/firefox". Architecture set to: x86_64h-apple-macosx. (lldb) thread list
4.根據調試命令進行調試xcode
<command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]
1.打印命令app
//同expression p //打印對象 po
2.項目中mach-o文件查詢函數
//查詢 類型UITableViewCell 在mach-o中的定義信息,並打印出最佳匹配 image lookup -t UITableViewCell //查詢 崩潰內存地址0x000000010e041b62 在mach-o中的定義信息,並打印出最佳匹配 //4 WYDoctorConsultModule_Example 0x000000010e041b62 -[WYFastConsultViewController //emptyViewModelDidRefreshOrderList:] + 162 image lookup -a 0x000000010e041b62 //查詢 方法名或者符號名爲emptyViewModelDidRefreshOrderList: 在mach-o中的定義信息,並打印出最佳匹配 image lookup -n emptyModelDidRefreshOrderList: //查詢 app中全部使用的mach-o信息,並打印出最佳匹配 image list
//對變量self->_pageNo進行監控 watchpoint set variable self->_pageNo //對內存地址&(self->_pageNo)進行監控 watchpoint set expression &(self->_pageNo) //查詢全部的內存監控 watchpoint list //刪除序號爲:1 的內存監控 watchpoint delete 1 //額外命令追加 //當序號:2 斷點觸發時,執行追加的命令 watchpoint command add 2 //刪除序號:2的命令追加 watchpoint command delete 2 //查詢全部追加命令的列表 watchpoint command list
4.爲項目源碼外的第三方靜態庫,動態庫添加斷點工具
breakpoint set -a 函數地址 breakpoint set -n 函數名稱 //爲符合正則表達式函數所有添加斷點 breakpoint set -r 任意包含此字符串的函數名稱 //breakpoint set -s 動態庫名稱 -n 動態庫方法名 breakpoint set -s dyld -n load
//打印當前棧幀frame的堆棧信息 thread backtrace bt命令同上 //函數提早返回 thread return [返回值] //當前棧幀的全部局部變量 frame variable //源碼級 代碼單步執行,下一步 thread step-over, next, n //指令級 彙編單步執行,下一步 thread step-inst-over, nexti, ni
expression (就是 p/print/call) expression -o(就是 po) //打印對象內存地址 expression -o -- 0x1111
brew install chisel
command script import /usr/local/opt/chisel/libexec/fblldb.py
後保存, 重啓Xcode或者從新打開終端,讓修改生效。優化
最後spa
平時的iOS開發中,使用的OC或者Swift是編譯性語言,每次修改都有從新編譯後才能看到結果,若是合理使用lldb調試器,將會大大提升開發效率。firefox