2017-07-12 102 views
-3

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

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

我需要这个解决我的问题(但问题不是我的问题,它只是为了提供一些背景为什么我需要我要求的功能): 出于某种原因,不知何故阅读我的一些属性调试器产生不需要的副作用(导致另一个属性发生变化)。当我在代码中执行相同的操作(读取对象的属性)时,就不会发生这种情况。要找到哪个属性(因为我有许多这样的属性)会导致这种效果,所以我希望当调试器评估导致我的代码执行这些断点的表达式时使得断点处于打状态。

我找不到任何功能,在Visual Studio中启用这个功能。我错过了什么吗?或者,也许,它后来被添加了?我现在在Visual Studio 2008上。

编辑:我downvotes,所以我需要再次澄清。我不寻求帮助,在我的代码中找到问题(这就是为什么没有代码在这里)。我要求一个非常具体的事情。由于在调试器中对某些表达式进行评估,可以使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; 
    } 
} 
+1

你能提供的这个变化发生的例子吗? – Sal

+0

我想你必须提供[mvce]来解释读取一个属性将如何修改另一个属性。 – Filburt

+0

你的任何获得者都有副作用吗?你是否试图通过逐一观察房屋而不是一次性来缩小房屋面积?你能准确地详细描述你正在观察的内容吗? –

回答

0

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

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

+0

我知道有条件的断点。但是“表达评估”的条件是什么?该文章没有说明.. – Alex

+0

您可以在调试 - >常规 - >启用属性评估和其他隐式函数调用中禁用该选项。 –

+0

不,如果我这样做,属性将不会被调试器评估。我需要评估它们,但这些属性的getter中的断点会被击中(就像在调试器下的正常程序流程中一样)。 – Alex

0

像文档共享我们如何可以使用在VS IDE中的断点:

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

我的理解是,该数据断点可以实现你想得到的功能,但是这个功能现在真的有限制,现在它只支持VC++本地。

所以我同意布赖恩·雷诺兹,解决办法是,你可以尝试打破或拦截添加和调试监视窗口中删除。

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

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

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

+0

谢谢。但是,只是想仔细检查。如果数据值改变的原因是由Watch窗口(评估某个属性)引起的操作,而不是被调试的程序的代码,数据断点将会中断。文章从未提及这一点。目前,我的印象不是任何由调试窗口(不管是Watch,Auto,Locals)引起的评估都不会触发任何断点。 – Alex

+0

@Alex,不,只有指定的字节数从指定的地址开始修改: https://stackoverflow.com/questions/4794646/vb-net-add-watch-stop-when-value-changes。看起来它并不能真正满足你所有的要求,对吗? –

+0

没有实际的测试很难说。如果这些字节被进程/线程修改,而不是被调试的应用程序的线程,而是由调试器自己的线程修改,它会触发断点吗?原来,这将需要一个全新的概念,同时打出多个断点。我们已经停留在正在调试的应用程序的某个断点处(这是Watch窗口存在的唯一情况)。现在,我们希望执行其他操作(由Watch评估人员开始的代码),并在应用程序自己的代码仍然停留在原始BP时再次打开另一个BP .. – Alex

相关问题