有没有办法对变量进行监视,并且只有在值更改时Visual Studio才会中断?
这将使发现棘手的状态问题变得容易得多。
能做到吗?
断点条件仍然需要设置断点,而我宁愿设置一个监视并让Visual Studio在状态更改时设置断点。
有没有办法对变量进行监视,并且只有在值更改时Visual Studio才会中断?
这将使发现棘手的状态问题变得容易得多。
能做到吗?
断点条件仍然需要设置断点,而我宁愿设置一个监视并让Visual Studio在状态更改时设置断点。
Answers:
在Visual Studio 2005菜单中:
调试 -> 新断点 -> 新数据断点
输入:
&myVariable
您还可以选择在代码中明确地中断:
// Assuming C#
if (condition)
{
System.Diagnostics.Debugger.Break();
}
从MSDN:
Debugger.Break:如果未附加调试器,则会询问用户是否要附加调试器。如果是,则启动调试器。如果连接了调试器,则该调试器会发出用户断点事件的信号,并且调试器将挂起该过程的执行,就像遇到了调试器断点一样。
不过,这只是一个备用。如其他注释中所述,在Visual Studio中设置条件断点是更好的选择。
真的很老的帖子,但万一有人不知道...
在Visual Studio 2015中,您可以在set
自动实现的属性的访问器上放置一个断点,并且在更新属性时调试器将中断
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
}
一旦我们停止了程序:
调试->新断点->新数据断点...
地址:&(this-> m_value)
字节数:4(因为int有4个字节)
现在,我们可以恢复该程序了。更改值时,调试器将停止。
您可以对继承的类或复合类执行相同的操作。
class B
{
private:
A m_a;
};
地址:&(this-> m_a.m_value)
如果您不知道要检查的变量的字节数,则可以使用sizeof运算符。
例如:
// to know the size of the word processor,
// if you want to inspect a pointer.
int wordTam = sizeof (void* );
如果您查看“调用堆栈”,则可以看到更改变量值的函数。
如果您使用的是WPF,则有一个很棒的工具:WPF Inspector。
它将自身附加到WPF应用程序,并显示具有所有属性的完整控件树,它使您(除其他事项外)可以在进行任何属性更改时中断操作。
但是遗憾的是,我没有找到任何可以让您对ANY属性或变量执行相同操作的工具。
我记得您使用Visual Basic 6.0描述它的方式。在Visual Studio中,到目前为止,我发现的唯一方法是指定一个断点条件。
正如彼得·莫滕森(Peter Mortensen)写道:
在Visual Studio 2005菜单中:
调试->新断点->新数据断点
输入:&myVariable
附加信息:
显然,系统必须知道要监视的内存中的哪个地址。因此-将正常断点设置为myVariable
(或myClass.m_Variable
)的初始化-运行系统并等待,直到它在该断点处停止为止。-现在菜单项已启用,您可以通过输入来查看变量&myVariable
,或者通过输入来查看实例&myClass.m_Variable
。现在,地址已经定义好。
对不起,当我通过解释已经给出的解决方案来做错事情时。但是我无法添加评论,对此已有一些评论。
您可能可以巧妙地使用DebugBreak()函数。
myVariable
并将使用后的值存储在辅助previousValue
变量中,然后在调用DebugBreak()myVariable!=previousValue
;那么您将知道在哪个代码块之间进行了myVariable
更改。但是我同意AShelly的解决方案是最好的。
2019年更新:
Visual Studio 2019 Preview 2 for .Net Core 3.0或更高版本现已正式支持此功能。当然,您可能不得不考虑使用IDE预览版的潜在风险。我想不久的将来它将被包含在官方的Visual Studio中。
幸运的是,数据断点不再是C ++独有的,因为它们现在在Visual Studio 2019 Preview 2中可用于.NET Core(3.0或更高版本)!