是否有一种方法可以将一个手表放在变量上,并且只在该值发生变化时才有Visual Studio中断?
这将使找到棘手的州问题变得容易得多。
这能做到吗?
断点条件仍然需要断点设置,我宁愿设置一个监视表,让Visual Studio在状态更改时设置断点。
是否有一种方法可以将一个手表放在变量上,并且只在该值发生变化时才有Visual Studio中断?
这将使找到棘手的州问题变得容易得多。
这能做到吗?
断点条件仍然需要断点设置,我宁愿设置一个监视表,让Visual Studio在状态更改时设置断点。
当前回答
在Visual Studio 2015中,你可以在自动实现属性的set访问器上放置断点,当属性更新时,调试器将中断
public bool IsUpdated
{
get;
set; //set breakpoint on this line
}
更新
另外;@AbdulRaufMujahid在评论中指出,如果自动实现的属性在单行上,你可以将光标定位在get;或一组;按下F9,断点就会随之出现。好了!
public bool IsUpdated { get; set; }
其他回答
可以在非托管代码中使用内存观察点。但不确定这些在托管代码中是否可用。
我记得你用Visual Basic 6.0描述它的方式。在Visual Studio中,到目前为止我发现的唯一方法是指定断点条件。
您可以选择重载变量的=操作符,并且可以在特定条件下将断点放在重载函数内。
假设您有一个名为a的类,声明如下。
class A
{
public:
A();
private:
int m_value;
};
当有人修改了"m_value"的值时,你希望程序停止。
转到类定义并在a的构造函数中放置断点。
A::A()
{
... // set breakpoint here
}
一旦我们停止程序:
调试->新断点->新数据断点…
地址:&(这- > m_value) 字节计数:4(因为int有4个字节)
现在,我们可以继续这个项目了。当值被更改时,调试器将停止。
您可以对继承类或复合类进行同样的操作。
class B
{
private:
A m_a;
};
地址:&(这- > m_a.m_value)
如果不知道要检查的变量的字节数,可以使用sizeof操作符。
例如:
// to know the size of the word processor,
// if you want to inspect a pointer.
int wordTam = sizeof (void* );
如果你看一下“调用堆栈”,你可以看到改变变量值的函数。
您可能可以巧妙地使用DebugBreak()函数。