2010-04-29 76 views
1

我追逐一个对象的成员值似乎奇迹般地改变,而没有任何方法被称为修改它的错误。毫无疑问,事情很明显,但难以追查。 我知道我可以在基于变量值的方法中放置条件断点,但是它是否可以通过任何方式将断点实际放在变量本身上?例如x == 4时触发的断点?我知道我可以放上手表,断点怎么样?变量变化值的断点?

编辑:这是一个本机唯一项目,没有管理说大话。

回答

4

可以使用data breakpoint。关于如何和何时可以使用它们有许多限制,即它们只能用本机代码工作。 (据我所知,当变量发生变化时,你只能告诉它中断,而不是当它变成特定的值,但我不完全确定;我的大部分代码是托管/本机混合的因此不能使用数据断点)。

+0

+1 - 如果这是因为它看起来非常有用,它会帮助我解决我一直在追了过去三个月的错误。 – 2010-04-29 16:27:33

+0

它没有 - 显然它不像阵列有帮助 - 但是我发现了错误,所以我很高兴。 – 2010-05-02 02:26:48

+0

它甚至可以通过编程完成:http://www.morearty.com/code/breakpoint/ – 2010-05-17 18:10:51

-1

你应该做的是刚刚住变量的设定/获得 - 不只是一个模板的功能,但实际上在一个单独的类,在设置/获取必须用来访问。然后在那里放一个断点。或者,为了更容易切换和更改,可以将该值包装在类中,并使用运算符重载(以及适当的中断)进行更改。这可能是最干净和最便携的解决方案。

什么,你也可能会发现是变量被修改是不是您意想不到的途径。我得到的最好例子是当我从零开始增加时,我从零中减去了无符号整数,所以当我寻找那些我知道修改它的地方时,没有标记出来。无法解决跆拳道正在进行。

不过,据我所知,VC++不支持任何机制,打破上任意修改,如果数据断点不会为你工作。例如,如果它由于堆栈/堆损坏而更改。但如果你正在运行调试,我希望VC++会打破这些。

+0

所以你想让我把每个变量都包装在一个特殊的类中,完全重新设计整个代码库?但是如果你认为你正在查看一个对象,并且你的指针混淆了,或者试图在删除它之后引用一个对象等,你仍然没有意识到值可能会改变。 – 2010-04-29 21:50:15