14

如果你从 Xcode 编辑断点,有一个超级有用的选项可以添加一个“动作”,每次断点被击中时都会自动执行。

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

4

1 回答 1

31

轻松使用breakpoint command add命令。键入help breakpoint command add以获取详细信息,但这是一个示例。

int main ()
{
    int i = 0;
    while (i < 30)
    {
        i++; // break here
    }
}

在此运行 lldb。首先,在源代码行的某处放置一个断点,其中包含“break”(这样的例子很好的简写,但它基本上必须对你的源代码进行 grep,所以对于大型项目没有用处)

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

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

(lldb) br mod -c 'i % 5 == 0' 1

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

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

然后使用它:

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
于 2013-05-02T19:43:38.503 回答