1

我正在尝试调试一个似乎在指针传递方面存在问题的程序。我有一个定义如下的类:

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重新分配)并在那里中断?

4

1 回答 1

0

获取d->md使用的地址print d->md并观察表达式*((metadata *)0x....)而不是使用名称d

于 2012-09-07T19:26:31.893 回答