LLDB(Low Lever Debug)是一个轻量级的调试工具.
断点
- 通过指令
breakpoint set -n test1
可以为c函数设置断点,set 是字命令;-n是选项是 name的缩写;text1是函数名。设置完断点会输出如下的断点信息
Breakpoint 2: where = LLDB--01`test1 + 8 at ViewController.m:19,
address = 0x0000000100372634
即:当前设置了两个断点,断点函数名称是test1,在当前文件的第19行,内存地址为0x0000000100372634。
通过命令
breakpoint set -n "-[ViewController xxx:]"
可以为oc方法设置断点,xxx为方法名称;
我们通过一条命令设置多个断点,像这样breakpoint set -n "-[ViewController saveGame:]" -n "-[ViewController pauseGame:]" -n "-[ViewController continueGame:]"
同时给三个方法设置了断点。
如果我们想为工程中所有方法名相同的方法设置断点可以使用breakpoint set --selector 方法名
,例如给工程中所有使用- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
方法处设置断点的命令为breakpoint set --selector touchesBegan:withEvent:
;
也可以使用breakpoint set --file 文件名 --selector 方法名
在某个文件中根据方法名来设置断点;
还可以使用breakpoint set -r 遍历关键字
来为工程中方法名中包含关键字的方法加断点,例如:breakpoint set -r wyf:
给整个项目中所有满足wyf:这个字符的所有方法加断点。-
通过命令
breakpoint list
可以查看设置的断点,例如:上面三个断点的断点列表为:
通过命令
breakpoint disable x
可以禁用某一组或某一条断点,x指某一组断点或某一组的某一条断点,例如breakpoint disable 1
breakpoint disable 1.1
分别是禁用第一组的所有断点和禁用第一组的第一条断点。
同样的命令breakpoint enable x
可以启用某一组或某一条断点。命令
breakpoint delete x
可以删除某一组的断点,这里需要注意的是断点不可以删除某一条,例如执行breakpoint delete 1.1
并不会删除第一组的第一个断点,而是会禁用这一条断点;相当于执行了breakpoint disable 1.1
,如果不指定组号则可以删除所有断点。命令
expression
(简写为p),expression可以在你hook的环境中动态的注入代码,例如在ViewController的touchBegain的方法加断点hook住当前的控制器通过命令p self.view.backgroundColor = [UIColor redColor]
给当前控制器设置颜色;(LLDB换行:control+回车)。内存断点,除了给方法加断点外,还可以给程序中的某一个属性加断点,例如:
watchpoint set variable p1->_name
其中p1是对象,_name是p1的属性,当_name发生改变是,程序就会触发断点。这个有点类似KVO。断点添加操作,
break command add x
,当断点一触发就会执行添加的代码,x是断点组号;break command list
:查看断点添加的列表,break command delete
:删除断点添加代码。
target stop-hook add -o "xxx"
,每次stop的时候都会调用,这个命令只对 breakpoint和watchpoint有效。同样的有target stop-hook delete
:删除image lookup -a xxx
查看断点堆栈信息详情,xxx为内存地址。