Lldb : Setting conditional breakpoint with string equality as condition

允我心安 提交于 2021-02-07 05:25:31

问题


I would like to set a conditional breakpoint with lldb. This is usually done using -c option :

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

However, in my case I want to test if a std::string object is equal to a certain string value but doing this

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

does not work… Lldb does not complain (while gdb would return an error) but it ignores the condition string upon reaching the breakpoint and breaks too early…

This question is similar to this one but with lldb instead of gdb. The solution presented there

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

does not seem to be valid with lldb

Lldb version used : 3.4


回答1:


(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) 

You can add the conditional expression after the fact. Like

(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 takes a breakpoint number / list of breakpoint numbers at the end, defaulting to the newest breakpoint if none are specified (which is what I did here).



来源:https://stackoverflow.com/questions/37204551/lldb-setting-conditional-breakpoint-with-string-equality-as-condition

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!