我正在追逐一个错误,其中一个对象的成员值似乎神奇地改变了,没有任何方法被调用来修改它。毫无疑问,有些事情显而易见,但很难找到。 我知道我可以在基于变量值的方法中放置条件断点,但是它是否可以以任何方式实际在变量本身上设置断点?例如,当x == 4时会触发的断点?我知道我可以放手表,断点怎么样?
编辑:这是一个仅限本机的项目,没有托管的malarkey。
答案 0 :(得分:4)
您可以使用data breakpoint。关于如何以及何时使用它们有许多限制,即它们仅在本机代码中起作用。
(据我所知,你只能告诉它在变量发生变化时中断,而不是在它变为特定值时,但我不完全确定;我的大部分代码都是混合的托管/本机和因此不能使用数据断点)。
答案 1 :(得分:-1)
你应该做的只是将变量包装在set / get中 - 不仅仅是模板函数,而且实际上是在一个单独的类中,必须使用set / get来访问。然后在那里放一个断点。或者,为了更容易切换和更改,您可以将值包装在类中,并使用运算符重载(具有适当的中断)来更改。这可能是最干净,最便携的解决方案。
您可能还会发现,被修改的变量并非您期望的方式。我得到的最好的例子是我有无符号的int,当我想从零增加时减去零,所以当我寻找我知道修改它的地方时,那没有标记。无法解决wtf的问题。
但是,据我所知,如果数据断点不适合您,VC ++不支持中断任意更改的机制。例如,如果由于堆栈/堆损坏而更改它。但是如果你在调试中运行,我会期望VC ++会破坏它们。