使用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的=运算符,并可以将特定条件下的重载函数内的断点。