在Visual Studio调试模式下遵循对象状态

时间:2011-02-11 12:45:18

标签: .net visual-studio visual-studio-2010 debugging

假设我有一个WinForm,我有一个private int selectedObjectsCount

调试模式中是否有办法通过调试会话“跟随”此对象状态?

或者,在其他情况下,我有一个myFont实例。我想看看它的属性IsBold何时发生变化(被修改)

我需要一个跟踪,因为一个对象变得“重视”并且我不理解发生的

在VS 2010中是否有类似的可能性?

7 个答案:

答案 0 :(得分:1)

在这种情况下,我将selectedObjectsCount实现为属性,在setter中我会检查值的变化:

set
{
    if (M_selectedObjectsCount != value)
    {
        selectedObjectsCount = value;//break here
    }
}

答案 1 :(得分:1)

在适当的位置创建断点,查看对象何时更改,右键单击断点并选择“When hit ...”,您可以在调试窗口中打印对象内容 - 有效地查看对象何时更改以及何时更改。 / p>

在任何断点处,您将在“调用堆栈”调试窗口中拥有完整的跟踪。

调试的艺术是你应该重视和学习的东西(它会得到回报)。有关VS中调试备选方案的简单概述,请参阅this page

答案 2 :(得分:0)

您可以使用Watch窗口。如果您没有在VS的底部看到它,可以通过转到Debug-> Windows-> Watch-> Watch 1(或其他Watch窗口)来打开它。此菜单项仅在您进行调试时可用。

您可以在其中添加对象,其属性甚至表达式,并在跟踪时查看其值。通过双击Watch窗口中的最后一行并在Name列中输入表达式来添加项目。

E.g。在表单中调试时,在名称中输入 Height ,您将看到它的值。 您还可以执行以下操作:(高度+宽度)/ 2

但是,您无法在值更改时设置断点。但是在跟踪时,行的更改值将会突出显示。不幸的是,你必须单步执行代码,不能只运行代码。

答案 3 :(得分:0)

正如其他人所说,.NET中没有“数据断点”。如果您拥有要跟踪的变量,那么您可以做的最好的事情就是在设置器中放置一个breapoint,然后右键单击断点,选择Conditional Breakpoint来检查值是否确实在变化。如果要跟踪的变量是字段,则必须将其转换为属性。

如果您不拥有该属性的代码,您可以使用Resharper的Value Origin功能快速查找代码设置属性的所有位置,并在其中放置断点:很多工作但是它完成工作。

答案 4 :(得分:0)

您是前Visual Interdev / VB6用户吗?

我记得你可以设置一个断点来“在价值变化时中断”。不幸的是,后续版本无法做到这一点。

我认为@TheNIK用房产取代的想法可能是你最好的选择。或者使用“查看所有引用”,然后在@TeddHansen说“打击时”打印。

答案 5 :(得分:0)

可以在Visual Studio 2010中执行此操作。您需要使用的是“调试/新断点/新数据断点...”菜单选项。

但是,该选项仅适用于本机C ++项目。

有关详细信息,请参阅此处 - http://msdn.microsoft.com/en-us/library/350dyxd0.aspx

[edit] - 对于其他语言和您的具体情况,您可以创建一个继承自Font类并覆盖IsBold属性的新类。将断点放在那里并使用这个新的自定义类而不是Font。这有点长,但应该有用。

答案 6 :(得分:0)

从技术上讲,C#中没有“数据断点”,因为在垃圾收集紧凑阶段,对象在内存中移动。 但通常你可以用属性来做这个技巧 - 属性被编译成setter和getter方法,你可以像对待任何其他方法一样在它们上设置断点。

我刚刚在这里回答了一个非常相似的问题:

Reasking about hitting breakpoint at property setter