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
;