Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当VisualStudio调试器评估值时,是否可以使C#代码在断点处停止?_C#_Visual Studio_Debugging - Fatal编程技术网

当VisualStudio调试器评估值时,是否可以使C#代码在断点处停止?

当VisualStudio调试器评估值时,是否可以使C#代码在断点处停止?,c#,visual-studio,debugging,C#,Visual Studio,Debugging,我不知道如何抓住VisualStudio调试器在C#代码中计算我的属性值的时刻。断点仅在我的代码访问该属性时有效,而不是在Visual Studio调试器(监视此属性时) 我的问题是:当VisualStudio调试器在监视窗口中显示此属性的值(并为此执行此getter)时,VisualStudio是否具有更改断点行为的设置或功能,从而使其成为命中断点(如果此类断点位于属性的getter中) 我需要这个来解决我的问题(但问题不是我的问题,它只是提供一些背景,为什么我需要我所要求的功能): 出于某种

我不知道如何抓住VisualStudio调试器在C#代码中计算我的属性值的时刻。断点仅在我的代码访问该属性时有效,而不是在Visual Studio调试器(监视此属性时)

我的问题是:当VisualStudio调试器在监视窗口中显示此属性的值(并为此执行此getter)时,VisualStudio是否具有更改断点行为的设置或功能,从而使其成为命中断点(如果此类断点位于属性的getter中)

我需要这个来解决我的问题(但问题不是我的问题,它只是提供一些背景,为什么我需要我所要求的功能): 出于某种原因,调试器读取对象的某些属性会产生不必要的副作用(导致另一个属性发生更改)。当我在代码中执行相同的操作(读取对象的属性)时,不会发生类似的情况。要找到导致这种效果的属性(因为我有许多属性),我希望在调试器计算表达式时命中断点,从而执行带有这些断点的代码

我在Visual Studio中找不到任何启用此功能的功能。我错过什么了吗?或者,可能是后来添加的?我现在在VisualStudio2008上

编辑:我得到了反对票,所以我需要再次澄清。我不是在寻找代码中的问题时寻求帮助(这就是为什么这里没有代码)。我要求的是一件非常具体的事情。当由于在调试器中计算某个表达式而执行时,是否可以使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;
    }
}

您可以在VS中设置条件断点。在希望的行上设置断点,单击鼠标右键并单击“条件”


此链接可以帮助您解决断点条件:

如文档所示,该文档与我们分享了如何在VS IDE中使用断点:

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

因此,我同意Brian Reynolds的观点,解决方法是您可以尝试在调试监视窗口中打开或截取Add和Remove

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


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

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


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

您能提供一个示例说明此更改是如何发生的吗?我想您必须提供一个[mvce]来解释读取一个属性将如何修改另一个属性。是的,您可以。在您认为失败的行/步骤之后立即在该行/步骤上放置一个断点,以及同一行。检查前后的值。如果没有代码(尽管有澄清),就不可能为您指出正确的方向,但这家伙不是来听的。他是来告诉你答案的,而你已经耗尽了他的耐心。关于编程,只有一小段他还不知道的信息,而你的工作就是提供它,而不是胡说八道。“属性……改变值……不会发生在代码流中……”-?!?我不确定您是否对不同环境下的程序编译期间发生的事情有基本的了解。我知道有条件断点。但“命中表达式求值”的条件是什么?本文没有说明..您可以禁用调试->常规->启用属性求值和其他隐式函数调用中的选项。不,如果我这样做,调试器将根本不会计算属性。我需要对它们进行评估,但是这些属性的getter中的断点会被命中(就像在调试器下的正常程序流中一样)。我这么说是因为您提到调试器读取的某些属性会产生副作用,您不知道这是什么属性。关闭该选项将消除问题,您可以手动评估需要查看的属性。根据我的理解:您启动代码,点击一个断点,将一个类添加到监视列表中,展开它以检查属性,在这一步的某个地方,您有另一个属性意外地发生了更改,尽管您的getter行上有一个断点。在监视中执行函数时,您将无法命中断点。您是否可以通过在当前断点之后实例化监视中的对象,然后将其从监视中删除,然后单步执行类/属性的初始化来复制此问题,当你有一块手表在换房子的时候?谢谢。不过,我只是想再核实一下。如果数据值更改的原因是由监视窗口(用于评估某些属性)而不是被调试程序的代码引起的操作,则数据断点是否会中断。这篇文章从来没有提到这一点。目前,我的印象是,调试窗口(无论是监视、自动、本地)导致的任何计算都不会触发任何断点。@Alex,不会,仅当指定的字节数从指定的地址开始修改时:。似乎它也不能真正满足您的所有要求,对吗?没有实际测试很难判断。如果这些字节是由进程/线程(与正在调试的应用程序的线程不同,但由调试器自己的线程)修改的,它会触发断点吗?结果是需要一个全新的conc