Xcode断点调试与lldb常用命令
06 December 2020
Xcode断点调试与lldb常用命令
Xcode断点调试
断点
添加符号断点 我们可以使用方法名作为符号名,添加符号断点。添加符号断点左下角加号,如下图: 
添加一个符号名为sayHello的符号断点。
然后,调试运行 
编辑断点 
添加断点行为,在断点时执行代码 
创建条件断点,并在断点时打印函数调用的堆栈信息 
lldb常用命令
LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器。也可以安装 Chisel,它是一个开源的 LLDB 插件合辑这会使调试变得更加强大。
常用命令
po:查看对象的 description 方法的结果,po是e -o --的别名;print:打印值,print是expression --的别名,最简写法p,p/x 16打印十六进制,p/t 16打印二进制,p/c打印字符,p/s打印以’\0’结尾的字符串;格式:p/x <变量名>,x是十六制;expression<表达示>:改变程序值,如`e a = 20`表达示>frame info:获得当前栈帧信息,可简写fr i;frame variable:获得在当前栈帧下的变量列表,可简写fr v;frame variable <var_name>:获得在当前栈帧下的指定的变量,可简写fr v <var_name>;thread backtrace:打印线程堆栈,后面加all的印所有线程堆栈信息,可简写th b;bt:函数调用堆栈信息;- script : 进入 python 脚本程序;facebook开源的强大的chisel;
breakpoint list:列出所有断点信息,可简写br l;br disable 1禁用第1个断点;br del 1删除第1个断点;thread list:列表所有线程列表,可简写th l;thread return:立即执行返回命令,跳出当前栈帧,如thread return NO;b ptrace:列举模块;call [NSThread callStackSymbols],获取堆栈符号列表;image lookup: 查找定位在模块中的位置;加--address/a参数可以指定地址寻址定位代码位置;--name根据指定符号名查找;--type根据类型查找;target stop-hook:- 在每次 stop 的时候去执行一些命令;例如:
target stop-hook add -o "frame variable",在每次 stop 时,执行frame variable命令; target stop-hook list: 列出 hook 的所有断点;target stop-hook del编号: 删除 hook 的断点;
- 在每次 stop 的时候去执行一些命令;例如:
变量操作
(lldb) e int $a = 2
(lldb) p $a * 19
38
(lldb) e NSArray *$array = @[ @"Saturday", @"Sunday", @"Monday" ]
(lldb) p [$array count]
2
(lldb) p (char)[[$array objectAtIndex:$a] characterAtIndex:0]
'M'
(lldb) p/d (char)[[$array objectAtIndex:$a] characterAtIndex:0]
77
流程操作
process continue:对应continue按钮功能,别名也是continue,让程序继续执行,可缩写为c; thread step-over:跳过一行代码,到下一行,别名为next,可缩写为n; thread step in:跳进一个函数,别名step,缩写s;
