Lldb:设置条件断点,字符串相等为条件

时间:2016-05-13 08:04:43

标签: breakpoints lldb conditional-breakpoint

我想用lldb设置一个条件断点。这通常使用-c选项完成:

breakpoint set -f myFile.cpp -l 123 -c 'a==3'

但是,在我的情况下,我想测试一个std::string对象是否等于某个字符串值但是这样做

breakpoint set -f myFile.cpp -l 123 -c 'a=="hello"'

不起作用... Lldb没有抱怨(虽然gdb会返回错误)但它在到达断点时忽略了条件字符串并且过早地中断...

此问题与this one类似,但使用lldb而不是gdb。那里提出的解决方案

breakpoint set -f myFile.cpp -l 123 if strcmp(a, "hello")==0

似乎对lldb无效

使用的Lldb版本:3.4

1 个答案:

答案 0 :(得分:8)

(lldb) br s -n main -c '(int)strcmp("test", var)==0'
Breakpoint 1: where = a.out`main + 11 at a.c:3, address = 0x0000000100000f8b
(lldb) br li
Current breakpoints:
1: name = 'main', locations = 1
Condition: (int)strcmp("test", var)==0

  1.1: where = a.out`main + 11 at a.c:3, address = a.out[0x0000000100000f8b], unresolved, hit count = 0 

(lldb) 

您可以在事后添加条件表达式。像

(lldb) br s -n main
Breakpoint 1: where = a.out`main + 11 at a.c:3, address = 0x0000000100000f8b
(lldb) br mod -c '(int) strcmp("test", var) == 0'
(lldb) br li
Current breakpoints:
1: name = 'main', locations = 1
Condition: (int) strcmp("test", var) == 0

  1.1: where = a.out`main + 11 at a.c:3, address = a.out[0x0000000100000f8b], unresolved, hit count = 0 

(lldb) 

breakpoint modify在最后获取一个断点号/断点号列表,如果没有指定断点号,则默认为最新的断点(这就是我在这里做的)。