lldb中的条件断点是否符合内存中的值?

时间:2014-02-18 16:02:12

标签: breakpoints lldb conditional-breakpoint

根据内存中的值在lldb中设置条件断点的语法是什么?

类似的东西:

breakpoint modify -c "memory read -Gx $esp+4 == 0"

或者,我想如果条件为false,我可以设置断点命令继续,但我也找不到它的语法:)

1 个答案:

答案 0 :(得分:8)

breakpoint modify的{​​{1}}参数采用C ++表达式,在命中断点时对其进行求值,如果结果为非零(true),则断点停止。

--condition

(lldb) br s -n foo Breakpoint 1: where = a.out`foo, address = 0x00001f30 (lldb) br mod -c '*(int*) ($esp+4) == 10' (lldb) r Process 11102 launched: '/private/tmp/a.out' (i386) Process 11102 stopped * thread #1: tid = 0x42c6f9, 0x00001f30 a.out`foo, queue = 'com.apple.main-thread, stop reason = breakpoint 1.1 #0: 0x00001f30 a.out`foo a.out`foo: -> 0x1f30: pushl %ebp 0x1f31: movl %esp, %ebp 0x1f33: pushl %eax 0x1f34: movl 8(%ebp), %eax (lldb) x/x $esp+4 0xbffffbf0: 0x0000000a (lldb) 周围的括号是保持指针算术的大小 - $esp+4。如果没有这些括号,表达式将取消引用int *

在寄存器中传递参数的平台(x86_64,armv7,arm64用于某些参数),lldb提供了方便的寄存器别名$esp+16$arg1等,这些对于这些类型很方便断点条件。