我正在尝试调试一个似乎存在指针传递问题的程序。我的课程定义如下:
class data{
public:
data(int x, int y){
a=x;
b=y;
md = new metadata();
}
~data(){
delete md;
}
int a;
int b;
metadata* md; //metadata is another class
};
和几个带有指向数据对象的指针的函数:
void function1(data* d){
//do stuff
}
void function2(data* d){
//do stuff
function1(d);
}
void function3(data* d){
//do stuff
function2(d);
}
int main(){
//stuff
data* data = new data(1,2);
function3(d);
//other stuff
}
我在function1
设置断点,在function3
设置断点。在这两个断点之间的某处,md
被重新分配以指向不同的元数据对象(d
,但仍然指向相同的内存地址)。在两个断点之间执行了数千行,因此单步执行并不可行,因此我想在md
指针更改时观察和中断。但是,watch d->md
中的breakboint function1
不起作用,因为我收到消息说
Watchpoint 1 deleted because the program has left the block in which its expression is valid
这可能是因为d
在函数的上下文中是局部的。有没有办法观察存储md
指针的内存地址,以查看它何时被更改(即重新分配md
时)并在那里中断?
答案 0 :(得分:0)
使用d->md
获取print d->md
的地址并观看表达式*((metadata *)0x....)
,而不是使用名称d
。