LLDB断点调试

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 *)touches withEvent:(UIEvent *)event方法处设置断点的命令为breakpoint set --selector touchesBegan:withEvent:;
    也可以使用breakpoint set --file 文件名 --selector 方法名在某个文件中根据方法名来设置断点;
    还可以使用breakpoint set -r 遍历关键字来为工程中方法名中包含关键字的方法加断点,例如:breakpoint set -r wyf:给整个项目中所有满足wyf:这个字符的所有方法加断点。

  • 通过命令breakpoint list可以查看设置的断点,例如:上面三个断点的断点列表为:

    LLDB断点调试_第1张图片
    断点列表.png

  • 通过命令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为内存地址。

你可能感兴趣的:(LLDB断点调试)