有没有办法将监视放在变量上,只有在该值发生变化时Visual Studio才会中断?
这样可以更容易地找到棘手的状态问题。
可以这样做吗?
断点条件仍然需要设置断点,我宁愿设置一个监视器,让Visual Studio在状态更改时设置断点。
答案 0 :(得分:118)
在Visual Studio 2005菜单中:
调试 - > 新断点 - > 新数据断点
输入:
&myVariable
答案 1 :(得分:27)
您还可以选择在代码中明确断开:
// Assuming C#
if (condition)
{
System.Diagnostics.Debugger.Break();
}
来自MSDN:
Debugger.Break: 如果没有附加调试器,则用户是 问他们是否要附上一个 调试器。如果是,调试器是 开始。如果连接了调试器, 调试器与用户发出信号 断点事件和调试器 暂停执行该进程 就像调试器断点一样 击中。
但这只是一个后备。如其他注释中所述,在Visual Studio中设置条件断点是更好的选择。
答案 2 :(得分:26)
真的很老,但万一有人不知道......
在 Visual Studio 2015 中,您可以在自动实现的属性的Cells(1, 1) = input
访问器上放置断点,并且在更新属性时调试器将中断
set
<强>更新强>
可替换地; @AbdulRaufMujahid在评论中指出,如果自动实现的属性在一行上,您可以将光标定位在public bool IsUpdated
{
get;
set; //set breakpoint on this line
}
或get;
并点击set;
,并且断点将是相应地放置。尼斯!
F9
答案 3 :(得分:13)
想象一下,你有一个名为A的类,声明如下。
class A
{
public:
A();
private:
int m_value;
};
当某人修改“m_value”的值时,您希望程序停止。
转到类定义并在A的构造函数中放置断点。
A::A()
{
... // set breakpoint here
}
一旦我们停止了该计划:
调试 - &gt;新断点 - &gt;新数据断点......
地址:&amp;(this-&gt; m_value)
字节数:4(因为int有4个字节)
现在,我们可以恢复该计划。当值改变时,调试器将停止。
您可以对继承的类或复合类执行相同的操作。
class B
{
private:
A m_a;
};
地址:&amp;(this-&gt; m_a.m_value)
如果您不知道要检查的变量的字节数,可以使用sizeof运算符。
例如:
// to know the size of the word processor,
// if you want to inspect a pointer.
int wordTam = sizeof (void* );
如果查看“调用堆栈”,您可以看到更改变量值的函数。
答案 4 :(得分:9)
将变量更改为属性并在set方法中添加断点。例如:
private bool m_Var = false;
protected bool var
{
get {
return m_var;
}
set {
m_var = value;
}
}
答案 5 :(得分:3)
我记得你用Visual Basic 6.0描述它的方式。在Visual Studio中,到目前为止我找到的唯一方法是指定breakpoint condition。
答案 6 :(得分:3)
如果您使用的是WPF,那么有一个很棒的工具:WPF Inspector 它将自身附加到WPF应用程序并显示具有所有属性的完整控件树,它允许您(除其他外)在任何属性更改时中断。
但遗憾的是我找不到任何可以让你对任何属性或变量做同样的工具。
答案 7 :(得分:2)
右键单击断点对我来说很好(虽然我主要使用它来处理特定变量值上的条件断点。即使打破涉及线程名称的表达式,如果你试图发现线程问题也非常有用)
答案 8 :(得分:2)
彼得·莫滕森(Peter Mortensen)写道:
在Visual Studio 2005菜单中:
调试->新断点->新数据断点
输入:&myVariable
其他信息:
显然,系统必须知道内存中要监视的地址。
所以
-将正常断点设置为myVariable
(或myClass.m_Variable
)的初始化
-运行系统,直到它在该断点处停止。
-现在菜单项已启用,您可以通过输入&myVariable
来观看变量,
或通过输入&myClass.m_Variable
来实例。现在地址已经定义好了。
很抱歉,当我通过解释已经给出的解决方案来做错事情时。但是我无法添加评论,对此已有一些评论。
答案 9 :(得分:1)
您可以在非托管代码中使用内存监视点。不确定这些是否在托管代码中可用。
答案 10 :(得分:1)
您可以巧妙地使用DebugBreak()功能。
答案 11 :(得分:1)
您可以选择重载变量的=运算符,并可以在特定条件下将断点放在重载函数中。
答案 12 :(得分:0)
2019年更新:
.net Core 3.0或更高版本的Visual Studio 2019 Preview 2现在正式支持此功能。当然,您可能不得不考虑使用预览版IDE的潜在风险。我想不久的将来它将被包含在官方的Visual Studio中。
幸运的是,数据断点不再是C ++独有的,因为它们现在在Visual Studio 2019 Preview 2中可用于.NET Core(3.0或更高版本)!