当Visual Studio调试器评估值时,我可以让我的C#代码在断点处停止吗?

时间:2017-07-12 16:22:17

标签: c# visual-studio debugging

我无法弄清楚如何捕捉Visual Studio调试器在C#代码中评估我的属性值的时刻。断点仅在我的代码访问属性时有效,而不是Visual Studio调试器(当监视此属性时)。

我的问题是:当Visual Studio调试器在Watch窗口中显示此属性的值时,Visual Studio是否具有更改断点行为的设置或功能,以便它们被命中(如果此类断点位于属性的getter中) (并以某种方式为此执行此getter?)

我需要这个来解决我的问题(但问题不是我的问题,它只是为了提供一些背景,为什么我需要我要求的功能): 由于某种原因,调试器以某种方式读取我的对象的某些属性会产生不必要的副作用(导致另一个属性发生变化)。当我在代码中执行相同操作(读取对象的属性)时,不会发生类似情况。为了找到哪个属性(因为我有很多这样的属性)会导致这种影响,我想在调试器评估表达式时使命中断点,导致我的代码执行这些断点。

我无法在Visual Studio中找到任何启​​用此功能的功能。我错过了什么吗?或者,也许,它后来添加了?我现在在Visual Studio 2008上。

编辑:我得到了投票,所以我需要再次澄清它。我没有在我的代码中找到问题寻求帮助(这就是为什么这里没有代码)。我要求一个非常具体的事情。由于在调试器中评估某些表达式,在执行时是否可以使Visual Studio在断点处停止。就是这样。

public int MyProp1
{
    get
    {
      DoSomething1(); // I want VS debugger stop here on evaluating expression in Watch window
      return _value1;
    }
}
...
public int MyProp99
{
    get
    {
      DoSomething99(); // I want VS debugger stop here on evaluating expression in Watch window
      return _value99;
    }
}

3 个答案:

答案 0 :(得分:2)

在调试器属性评估期间不能启用断点。如果评估副作用导致调试问题,您可以做的是关闭属性评估和其他隐式调用(例如调试器对ToString()的调用)

在“选项”->“调试”->“常规”->“启用属性评估和其他隐式函数调用”下将其禁用。

答案 1 :(得分:0)

您可以在VS中设置条件断点。在您想要的行上设置断点,右键单击并点击条件。

此链接可以帮助您解决断点条件:https://blogs.msdn.microsoft.com/zainnab/2010/05/03/set-a-simple-breakpoint-condition/

答案 2 :(得分:0)

就像分享我们如何在VS IDE中使用断点的文档一样:

https://msdn.microsoft.com/en-us/library/5557y8b4(v=vs.110).aspx

我的理解是数据断点可以实现你想要的功能,但是这个功能现在确实有一个限制,它现在只支持VC ++本机。

所以我同意Brian Reynolds,解决方法是你可以尝试在调试监视窗口中打破或拦截添加和删除。

当然,对于数据断点问题,其他社区成员也在此向产品团队提交了此功能问题:

https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/6097301-support-data-breakpoints-for-c

如果您对VS产品有任何好的建议,也可以投票或提交功能请求。