我正在尝试调试一个似乎在指针传递方面存在问题的程序。我有一个定义如下的类:
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
对于断点function1
不起作用,因为我收到一条消息说
Watchpoint 1 deleted because the program has left the block in which its expression is valid
这可能是因为 ind
是函数上下文的局部变量。有没有办法查看存储md
指针的内存地址以查看它何时更改(即何时md
重新分配)并在那里中断?