iOS安全开发笔记1——常用的lldb命令
lldb,一个强大的debug调试工具,这里记录一下常用的命令。下面的命令都可以使用 help + 命令+ 子命令 来查看帮助菜单。
lldb调试的断点是可以在 ~/.lldbinit 里面写入加载的脚本,我们可以将一些通用的命令写进去。
expression
expression这个命令应该是最常用的,可以方便地进行打印各种对象信息或者执行代码。一般我们用到的都是它的简写:p 、 exp 和 po。
p 或者 exp 后面可以直接接OC的代码
po 后面则是接需要打印的对象
breakpoint
这个可以用来设置和管理断点,就像在代码区左边点一下一样。常用的命令有
设置断点,这个方法会将UIViewController的touchesBegan:withEvent:设置一个断点
1breakpoint set -n "-[UIViewController touchesBegan:withEvent:]"后面可以带几个-n参数。注意的是这样设置的断点会归为一个组,里面的断点是这个组的第几个断点,比如下面语句会生成断点组1,里面有1.1的断点和1.2的断点。
1breakpoint set -n "-[UIViewController touchesBegan:withEvent:]" -n "-[UIViewController touchesEnded:withEvent:]"带不同参数的时候
|
|
删除断点
1breakpoint delete 1如果不带后面的断点1来指定具体的断点,则会删除全部断点。
启用和禁用断点
12breakpoint enable 1.2breakpoint disable 1列出所有断点
1breakpoint list想在进入断点的时候执行代码,输入下面的命令之后,就会进入到一个代码编辑的状态,输入完代码之后,输入 ‘DONE’退出这个模式
1breakpoint command add 1
watchpoint
监控某个变量的改变
|
|
之后就会打印出它的新值和旧值的内存地址,你可以用po
进行查看。
|
|
它也有和breakpoint
一样的其他enable、list等子命令。
堆栈信息
打印当前堆栈,这个命令其实在左边的堆栈表里面就可看到了
|
|
简写是
|
|
堆栈上下跳转
最简单的就是使用down
或up
。
或者用
|
|
那个1在你打印堆栈信息的时候,每个调用栈的最前面都会有个frame #x的信息,那个1就是序号。
打印当前参数
|
|
下面这个命令可以回退执行,但是继续运行之后程序就会停了。
|
|
stop-hook
这个命令会在断点进入lldb的时候,调用你指定的代码
|
|
流程控制
继续c
、单步执行不进入子函数n
、单步执行进入子函数s
、汇编级别的单步执行ni
,或者按住ctrl键去点击XCode的那些按钮。
image lookup
看内存代码,可以把命令地址转为代码,也就是符号化。这个在奔溃的时候输出的那些内存地址信息特别有用
|
|
打印头文件
|
|
register
读写寄存器
|
|
memory read
读内存,这个命令的简写是x
|
|