使用Visual Studiodebugging器更改值时中断

有没有办法把一个监视放在variables上,只有当这个值发生变化时才会中断Visual Studio?

这将使它更容易find棘手的状态问题。

可以这样做吗?

断点条件仍然需要设置断点,我宁愿设置一个表,让Visual Studio在状态更改时设置断点。

在Visual Studio 2005菜单中:

debugging – > 新的断点 – > 新的数据断点

input:

&myVariable 

您也可以select在代码中明确分解:

 // Assuming C# if (condition) { System.Diagnostics.Debugger.Break(); } 

来自MSDN:

Debugger.Break:如果没有附加debugging器,则会询问用户是否要附加debugging器。 如果是,则debugging器启动。 如果连接了一个debugging器,debugging器就会发出一个用户断点事件的信号,debugging器暂停执行该过程,就像debugging器断点已经被命中一样。

不过这只是一个倒退。 在Visual Studio中设置条件断点(如其他注释中所述)是更好的select。

真的是旧的职位,但万一有人不知道…

Visual Studio 2015中 ,您可以在自动实现的属性的set访问器上放置一个断点,并且该属性更新时,debugging器将中断

 public bool IsUpdated { get; set; //set breakpoint on this line } 

更新

另外; @AbdulRaufMujahid在评论中指出,如果自动实现的属性是在一行中,你可以将你的光标放在get;set; 然后按F9 ,相应地就会放置一个断点。 太好了!

 public bool IsUpdated { get; set; } 

想象一下,你有一个叫A的类,下面的声明。

 class A { public: A(); private: int m_value; }; 

当有人修改“m_value”的值时,您希望程序停止。

转到类定义,并在A的构造函数中放置一个断点

 A::A() { ... // set breakpoint here } 

一旦我们停止该计划:

debugging – >新的断点 – >新的数据断点…

地址:&(this-> m_value)
字节计数:4(因为int有4个字节)

现在,我们可以恢复程序。 当值被改变时,debugging器将停止。

您可以对inheritance的类或复合类执行相同的操作。

 class B { private: A m_a; }; 

地址:&(this-> m_a.m_value)

如果您不知道要检查的variables的字节数,则可以使用sizeof运算符。

例如:

 // to know the size of the word processor, // if you want to inspect a pointer. int wordTam = sizeof (void* ); 

如果你看看“调用栈”,你可以看到改变variables值的函数。

将该variables更改为一个属性,并在set方法中添加一个断点。 例:

 private bool m_Var = false; protected bool var { get { return m_var; } set { m_var = value; } } 

如果您使用的是WPF,那么有一个很棒的工具: WPF Inspector 。
它将自己附加到一个WPF应用程序,并显示所有属性的完整控制树,它允许您(除其他外)打破任何属性更改。

但遗憾的是我没有find任何工具可以让你对任何属性或variables做同样的事情。

我记得你用Visual Basic 6.0描述它的方式。 在Visual Studio中,到目前为止我发现的唯一方法是通过指定一个断点条件 。

右键单击断点对我来说工作正常(虽然大多数情况下我使用它作为特定variables值的条件断点,即使打破涉及线程名称的expression式也是如此,如果您尝试查看线程问题,这是非常有用的)。

您可以在非托pipe代码中使用内存观察点。 不知道这些是否在托pipe代码中可用。

你可以巧妙地使用DebugBreak()函数。

您可以select重载variables的=运算符,并可以将特定条件下的重载函数内的断点。