如何通过LLDB命令行添加断点操作?

PHD*_*PHD 10 debugging xcode breakpoints lldb

如果您从Xcode编辑断点,则有一个超级有用的选项可以添加一个"Action",以便在每次遇到断点时自动执行.

如何从LLDB命令行添加此类操作?

Jas*_*nda 22

这个breakpoint command add命令很轻松.键入help breakpoint command add的细节,但这里有一个例子.

int main ()
{
    int i = 0;
    while (i < 30)
    {
        i++; // break here
    }
}
Run Code Online (Sandbox Code Playgroud)

在此运行lldb.首先,在源代码行中放置一个断点,在其中的某个地方使用"break"(对于这样的示例来说这是一个很好的简写,但它基本上必须对你的源代码进行grep,因此对大型项目没用)

(lldb) br s -p break
Breakpoint 1: where = a.out`main + 31 at a.c:6, address = 0x0000000100000f5f
Run Code Online (Sandbox Code Playgroud)

添加断点条件,以便断点仅在i5的倍数时停止:

(lldb) br mod -c 'i % 5 == 0' 1
Run Code Online (Sandbox Code Playgroud)

让断点打印当前值i并在其命中时回溯:

(lldb) br com add 1
Enter your debugger command(s).  Type 'DONE' to end.
> p i
> bt
> DONE
Run Code Online (Sandbox Code Playgroud)

然后使用它:

Process 78674 stopped and was programmatically restarted.
Process 78674 stopped and was programmatically restarted.
Process 78674 stopped and was programmatically restarted.
Process 78674 stopped and was programmatically restarted.
Process 78674 stopped
* thread #1: tid = 0x1c03, 0x0000000100000f5f a.out`main + 31 at a.c:6, stop reason = breakpoint 1.1
    #0: 0x0000000100000f5f a.out`main + 31 at a.c:6
   3        int i = 0;
   4        while (i < 30)
   5        {
-> 6            i++; // break here
   7        }
   8    }
(int) $25 = 20
* thread #1: tid = 0x1c03, 0x0000000100000f5f a.out`main + 31 at a.c:6, stop reason = breakpoint 1.1
    #0: 0x0000000100000f5f a.out`main + 31 at a.c:6
    #1: 0x00007fff8c2a17e1 libdyld.dylib`start + 1
Run Code Online (Sandbox Code Playgroud)