2014-01-11 42 views
7

随着gdb到lldb的新变化,我找不到如何在某些内存地址上设置观察点的方法。关于内存地址的观察点

在gdb中我用这个

watch -location *0x123456 

做同样的LLDB

w s e *0x123456 

是不是为我工作。 那么我能用什么来在lldb中运行相同的命令?

回答

16

设置在LLDB监视点时省略了“提领操作” *,只是通过地址:

watchpoint set expression -- 0x123456 
# short form: 
w s e -- 0x123456 

在存储位置0x123456设置一个观察点。或者,您可以使用--size来设置要观看的字节数。例如,在短形式:

w s e -s 2 -- 0x123456 

还可以设置一个观察点上的变量:

watchpoint set variable <variable> 
# short form: 
w s v <variable> 

例如:用下面的代码,并设置在第二线断点:

int x = 2; 
x = 5; 

我在Xcode调试器控制台中这样做了:

 
(lldb) p &x 
(int *) $0 = 0xbfffcbd8 
(lldb) w s e -- 0xbfffcbd8 
Watchpoint created: Watchpoint 1: addr = 0xbfffcbd8 size = 4 state = enabled type = w 
    new value: 2 
(lldb) n 

Watchpoint 1 hit: 
old value: 2 
new value: 5 
(lldb) 

更简单地说,我可以设定

 
(lldb) w s v x 
Watchpoint created: Watchpoint 1: addr = 0x7fff5fbff7dc size = 4 state = enabled type = w 
    declare @ '/Users/martin/Documents/tmpprojects/watcher/watcher/main.c:16' 
    watchpoint spec = 'x' 
+0

观察点我得到这个:地址错误表达式求值看失败,表情评估 – user3001909

+0

@ user3001909:奇怪,我测试过这一点。 - 我添加了一个例子。 –

+0

我试过你的例子,lldb说使用未声明的标识符'x'。然后做了 - e - 0xOFFSET,它工作。 watchpoint created:Watchpoint 1:addr = 0xOFFSET size = 4 state ... new value:10。 谢谢! – user3001909