Visual Studio:如何在修改成员变量时停止调试器?

Posted

技术标签:

【中文标题】Visual Studio:如何在修改成员变量时停止调试器?【英文标题】:Visual Studio: how do I have the debugger stop when a member variable is modified? 【发布时间】:2009-05-16 00:17:44 【问题描述】:

我的程序有一个永远不会改变的变量。然而,不知何故,它正在改变。有没有办法在修改特定成员变量时让调试器停止?

【问题讨论】:

【参考方案1】:

设置数据断点以在某些变量发生更改时停止执行。

在变量的初始化或变量可见的地方中断 - 您需要能够在内存中获取其地址。然后,从菜单中选择 Debug -> New Breakpoint -> New Data Breakpoint。输入“&var”(var 替换为您的变量名称。)

这将在修改变量的确切代码行上进入调试器。

更多文档在这里:

http://msdn.microsoft.com/en-us/library/350dyxd0.aspx

【讨论】:

为了完整起见:除了您的代码之外,可能还有其他事情会改变值,并且这些事情不会被内存断点捕获:***.com/questions/2362688/…【参考方案2】:

您可以在使用变量的地方设置条件断点。

在 Visual Studio 中,当光标位于要设置断点的行时按 F9 设置断点。 接下来,右键单击断点并选择条件。 输入您的条件,如

n != 5

祝你好运。

这里是a link from MSDN。

【讨论】:

【参考方案3】:

如果正在通过赋值或其他直接更新对其进行修改,则数据断点将起作用。但是,如果它正在通过其他方式进行修改——例如缓冲区覆盖——我不确定它是否会准确地告诉你它何时发生。只是需要记住的一点。

【讨论】:

除非我弄错了,否则数据断点设置在 内存位置 而不是标识符上。 (这就是为什么你必须在设置一个地址时给出一个计算地址的表达式。)所以它应该捕获缓冲区溢出、破坏堆栈、堆损坏以及所有这些好东西。 听起来不错。我想我正在考虑的问题是当标识符名称被优化并且您甚至无法设置断点时。 别担心,这是硬件功能,说真的。

以上是关于Visual Studio:如何在修改成员变量时停止调试器?的主要内容,如果未能解决你的问题,请参考以下文章

工具,Visual Studio 设置来检查未初始化的类成员

Visual Studio2008 C++结构体成员需要内存对齐吗?

visual studio 2013 在运行.exe 时修改路径变量

如何在Visual Studio中配置git

Visual Studio 2015 远程调试器没有调试器成员或监视表达式返回值

从工厂方法和静态变量分配中了解返回值优化 (Visual Studio)