C# “我该怎么做?”;运行直到此变量发生变化;什么时候调试?
在调试我的C#时,我经常想知道变量的值何时变化,然后调查程序的状态 目前,我是这样做的:C# “我该怎么做?”;运行直到此变量发生变化;什么时候调试?,c#,debugging,variables,visual-studio-express,watch,C#,Debugging,Variables,Visual Studio Express,Watch,在调试我的C#时,我经常想知道变量的值何时变化,然后调查程序的状态 目前,我是这样做的: 观察列表有问题的变量 物理垃圾邮件F10(单步跳过的快捷方式),直到我看到值更改为止 然而,所需F10的数量令人恼火 我想,这肯定是自动化的。但我在我的Microsoft Visual C#Express中找不到这一功能,这让我感到惊讶。毕竟,监视列表会自动以鲜红色突出显示更改的值 我遗漏了什么吗?是您要找的,但它们似乎在Visual Studio Express中不可用 在VisualStudio(非Ex
在VisualStudio(非Express)中,它的工作方式是使用等于监视值的表达式创建条件断点,并将“已更改”作为断点条件。以下是我在VisualStudio中的操作方法。按F9键或单击最左边距设置断点。然后在出现的红点上单击鼠标右键,然后选择“条件”命令。还有其他选择
但是,Visual Studio Express中可能不支持此操作。您可以使用条件断点
请参见您可以编写一个if语句,检查是否有更改,并在该if语句中出现断点,因此它最初会中断,然后单击“继续”,它将继续运行,直到到达该断点。快速版的简单技巧:
private string myValue;
public string MyValue
{
set
{
if (this.myValue != value) Debugger.Break();
this.myValue = value;
}
}
使用调试器。根据某些运行时条件中断,或者右键单击某些断点,然后选择“条件中断->已更改” 编辑:在Express中对此一无所知
如果您想在某个断点处捕获变量更改,而不是准确捕获更改的位置,则设置断点,右键单击它并选择“条件”。假设您的变量名为X,当前值为A。在条件字段中输入“X!=A”
现在,只有在X更改为A以外的某个值后,才会命中断点。不太可能。我假设OP需要一种数据断点,每当任何东西触及给定的内存位置时都会触发该断点。这种断点在VisualStudio中是不可用的。相反,如果数据更改且代码位于某个预定义位置,则会触发条件断点。@如果我错了,Vlad会纠正我,但这是可能的,但确切地说,C#的问题在于压缩垃圾收集器,它可以随时在内存中移动数据,因此,调试器应该在压缩阶段相应地移动数据断点(这似乎是一项非常繁琐的任务,但并非不可能实现)。非托管语言没有这个问题,所以数据断点。这对我来说不起作用,因为我的代码很大,而且所讨论的变量可以在许多地方更改。(我必须编写一千条if语句。)目前,我的部分代码故意直接更改变量,而没有经过setter。此外,setter除了设置值之外,还做了很多事情。如果我为“setter direct”和通过setter访问创建了单独的setter,那么该字段仍然可以从class.AFAIK直接访问,只有它们的本机调试器支持这一点。