请稍侯

Xcode断点调试与lldb常用命令

06 December 2020

Xcode断点调试与lldb常用命令

Xcode断点调试

断点

添加符号断点 我们可以使用方法名作为符号名,添加符号断点。添加符号断点左下角加号,如下图:

添加一个符号名为sayHello的符号断点。 然后,调试运行

编辑断点

添加断点行为,在断点时执行代码

创建条件断点,并在断点时打印函数调用的堆栈信息

lldb常用命令

LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器。也可以安装 Chisel,它是一个开源的 LLDB 插件合辑这会使调试变得更加强大。

常用命令

  • po:查看对象的 description 方法的结果,poe -o --的别名;
  • print:打印值,printexpression --的别名,最简写法pp/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 lbr 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 的断点;

变量操作

(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,可缩写为nthread step in:跳进一个函数,别名step,缩写s

参考:
GDB to LLDB command map
与调试器共舞 - LLDB 的华尔兹