如何以编程方式在调试器中添加监视

时间:2014-01-31 21:52:41

标签: c# debugging watch

您可以以编程方式添加break(Debugger.Break()),并且我会在某些地方执行此操作,这意味着出现了问题(而不是抛出异常,或者除了抛出异常)。

在某些情况下,我想以编程方式为某些变量添加监视。这可以以某种方式完成吗?目前我能想到的最好的是

object foo = someObjectIWantToWatch;

这样,我至少可以在代码中引用我想要观察的对象,因此我可以将鼠标悬停在该对象上以查看其内容。但这显然是一个黑客,我希望找到一个更好的方法。

编辑问题:

我有一个很大的应用程序,异步线程由各种系统事件驱动,但是当出现问题时,你想要浏览整个应用程序中的所有数据结构,寻找任何出错的线索。因此,在顶层,从(Main())启动的应用程序创建了一个对象,该对象将包含其他所有其他层次结构,并且Main()进入无限循环。

while (true)
{
    Thread.Sleep(100);
}

因此,如果应用程序因某种原因开始行为不端,您可以在那里设置一个断点,瞧。您可以浏览整个应用程序中的所有数据结构。但前提是您有对顶级容器对象的引用。您可以将鼠标悬停在对象上并以此方式浏览 - 但将对象显示在Autos或Watch中会更方便。所以我想做一些像

这样的事情
Debugger.Watch(theTopLevelObject);

是的我可以浏览并找到顶级对象,然后右键单击它,然后添加监视。但实际的声明不在附近,当你真正 on 断点时很难找到。

1 个答案:

答案 0 :(得分:0)

我知道这不是您问题的答案,但我想指出您可以执行Debug.WriteLine(someObjectIWantToWatch),然后在“输出”标签中查看该值是什么。此外,可以使用DebugView之类的工具来监视Debug.WriteLine输出,而不必在调试器中。

Visual Studio Debugger Extensibility APIVisual Studio SDK中可能有一个用于添加Watch变量的API,但我没有看到。