是否有一种方法可以将一个手表放在变量上,并且只在该值发生变化时才有Visual Studio中断?

这将使找到棘手的州问题变得容易得多。

这能做到吗?

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


当前回答

2019年更新:

现在,针对. net Core 3.0或更高版本的Visual Studio 2019预览2正式支持这一点。当然,您可能不得不考虑使用预览版IDE的潜在风险。我想在不久的将来,这将包含在官方的Visual Studio中。

https://blogs.msdn.microsoft.com/visualstudio/2019/02/12/break-when-value-changes-data-breakpoints-for-net-core-in-visual-studio-2019/

幸运的是,数据断点不再是c++独有的,因为它们现在在Visual Studio 2019预览2中可用于.NET Core(3.0或更高版本)!

其他回答

你也可以选择在代码中显式中断:

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

从MSDN:

调试器。打破: 如果没有附加调试器,则会附加用户 问他们是否要附上 调试器。如果是,则调试器处于 开始了。如果附加了调试器, 调试器使用用户发出信号 断点事件和调试器 暂停进程的执行 就好像是调试器断点 打击。

不过,这只是一个备用方案。在Visual Studio中设置条件断点(如其他评论中所述)是更好的选择。

可以在非托管代码中使用内存观察点。但不确定这些在托管代码中是否可用。

在Visual Studio 2015中,你可以在自动实现属性的set访问器上放置断点,当属性更新时,调试器将中断

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

更新

另外;@AbdulRaufMujahid在评论中指出,如果自动实现的属性在单行上,你可以将光标定位在get;或一组;按下F9,断点就会随之出现。好了!

public bool IsUpdated { get; set; }

2019年更新:

现在,针对. net Core 3.0或更高版本的Visual Studio 2019预览2正式支持这一点。当然,您可能不得不考虑使用预览版IDE的潜在风险。我想在不久的将来,这将包含在官方的Visual Studio中。

https://blogs.msdn.microsoft.com/visualstudio/2019/02/12/break-when-value-changes-data-breakpoints-for-net-core-in-visual-studio-2019/

幸运的是,数据断点不再是c++独有的,因为它们现在在Visual Studio 2019预览2中可用于.NET Core(3.0或更高版本)!

右键单击断点对我来说很好(尽管我主要是将它用于特定变量值上的条件断点。即使中断涉及线程名称的表达式,如果您试图发现线程问题,这也是非常有用的)。