Visual Studio扩展包 - 如何获取局部窗口中的信息?

3

我有一个 VSPackage,想要获取与调试模式中的本地窗口类似的信息(当前上下文中变量的值)。

我一直在尝试使用 DTE.Debugger.CurrentStackFrame 实例,因为它公开了表达式的参数和本地集合。然而,我无法找到一种将表达式的值作为对象获取的方法——Value 属性似乎只是 ToString 值。

2个回答

5

无法将该值作为对象获取,主要是因为该值不存在于与您的VS Package相同的进程中,而是存在于被调试的进程中。 Visual Studio调试器必须通过CLR API来操作该值。您能做的最好的事情就是从VS Package中获取字符串值。


调试器没有暴露这些信息吗?我期望有一个中央存储库,各种调试视图与之交互(即本地变量、监视、立即窗口以及在代码中悬停在变量上时)。此外,您能详细说明一下您提到的CLR API吗? - Alan Spark
1
@Alan,Visual Studio 调试器展示了这些信息的视图,但并未暴露底层数据。VS 调试器本身并不知道这些值是什么,而是依赖于语言特定的表达式求值器(EE)与实际 debugee 进程通信。基本上,VS 会向每个 EE 请求当前本地变量集合,并作为 IDebugProperty 对象返回。VS 调试器可以使用此接口检查这些值,但它实际上从未获取到原始的调试器对象。CLR API 是 ICorDebug API。 - JaredPar
感谢您详细的回复,Jared。我非常感激您的帮助。 - Alan Spark

0

您可以使用Visual Studio Visualizer访问实际对象。有关信息可以在这里找到。


1
或者您可以在以下网址找到有关Visualizers的示例:http://www.codeproject.com/KB/trace/ImageVisualizer.aspx - Jeremy Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接