可视化工具体系结构

更新:2007 年 11 月

本主题适用于:

版本

Visual Basic

C#

C++

Web Developer

速成版

主题适用 主题适用

仅限托管

主题适用

标准版

主题适用 主题适用

仅限托管

主题适用

专业团队版

主题适用 主题适用

仅限托管

主题适用

表格图例:

主题适用

适用

主题不适用

不适用

主题适用,但命令默认情况下隐藏

默认情况下隐藏的一条或多条命令。

调试器可视化工具的结构由两部分组成:

  • “调试器端”在 Visual Studio 调试器中运行。调试器端代码创建并显示可视化工具的用户界面。

  • “调试对象端”在 Visual Studio 正在调试的进程(“调试对象”)中运行。

可视化工具是一个调试器组件,借助它,调试器即可以一种有意义且易理解的方式将数据对象的内容显示(“可视化”)出来。某些可视化工具还支持数据对象编辑。通过编写自定义可视化工具,可以扩展调试器的功能,使其能够处理您自己的自定义数据类型。

要进行可视化处理的数据对象位于要调试的进程(“调试对象”进程)中。用于显示数据的用户界面在 Visual Studio 调试器进程内创建:

调试器进程

调试对象进程

调试器用户界面(数据提示、监视窗口、快速监视)

要可视化的数据对象

若要在调试器界面中可视化数据对象,则需要一些代码,以实现两个进程间的通信。由此可见,可视化工具的体系结构由两部分组成:“调试器端”代码和“调试对象端”代码。

调试器端代码用于创建其自身用户界面,该界面可从调试器界面调用,例如数据提示、监视窗口或快速监视。可以使用 DialogDebuggerVisualizer 类和 IDialogVisualizerService 界面来创建可视化工具界面。与所有的可视化工具 API 一样,DialogDebuggerVisualizer 和 IDialogVisualizerService 可在 Microsoft.VisualStudio.DebuggerVisualizers 命名空间中找到。

调试器端

调试对象端

DialogDebuggerVisualizer 类

IDialogVisualizerService 界面

数据对象

用户界面可从位于调试器端的对象提供程序获得要可视化的数据:

调试器端

调试对象端

DialogDebuggerVisualizer 类

IDialogVisualizerService 界面

数据对象

对象提供程序(实现 IVisualizerObjectProvider

调试对象端有一个对应的对象,称作对象源:

调试器端

调试对象端

DialogDebuggerVisualizer 类

IDialogVisualizerService 界面

数据对象

对象提供程序(实现 IVisualizerObjectProvider

对象源(从 VisualizerObjectSource 派生)

对象提供程序向可视化工具用户界面提供要可视化的对象数据。这些数据对象是对象提供程序从对象源获得的。对象提供程序和对象源提供 API,以便在调试器端和调试对象端之间传输对象数据。

每个可视化工具都必须获得要可视化的数据对象。下表给出了对象提供程序和对象源用于此目的的相应 API:

对象提供程序

对象源

GetData

- 或 -

GetObject

GetData

注意,对象提供程序既可使用 GetData,也可使用 GetObject。其个任何一个 API 均会针对对象源调用 GetData。对 VisualizerObjectSource.GetData 的调用将填充 [System.IO.Stream],它以序列化的方式将要可视化的对象呈现出来。

IVisualizerObjectProvider.GetObject 将这些数据反序列化为对象形式,使您可以在使用 DialogDebuggerVisualizer 创建的用户界面中显示这些数据。IVisualizerObjectProvider.GetData 将这些数据填充为原始 [System.IO.Stream],您必须自己进行反序列化。IVisualizerObjectProvider.GetObject 通过调用 IVisualizerObjectProvider.GetData 来获得序列化的 [System.IO.Stream],然后再对数据进行反序列化处理。如果 .NET 无法序列化该对象,而需要自定义序列化时,请使用 IVisualizerObjectProvider.GetData。在这种情况下,您还必须重写 VisualizerObjectSource.Serialize 方法。有关可序列化的对象的完整讨论,请参见序列化

如果要创建只读可视化工具,则与 GetDataGetObject 的单向通信就可满足要求。如果要创建支持数据对象编辑的可视化工具,还必须进行其他操作。您还必须能够将数据对象从对象提供程序返回给对象源。下表给出了对象提供程序和对象源用于此目的的 API:

对象提供程序

对象源

ReplaceData

- 或 -

ReplaceObject

CreateReplacementObject

再次提请注意,对象提供程序可使用的 API 有两个。数据总是以 [System.IO.Stream] 的形式从对象提供程序发送到对象源,但是,ReplaceData 要求您自己将对象序列化为 [System.IO.Stream]。

ReplaceObject 获取您提供的对象,将其序列化为 [System.IO.Stream],然后调用 ReplaceData 将 [System.IO.Stream] 发送到 CreateReplacementObject

使用其中任意一个 Replace 方法将在调试对象中创建一个新数据对象,然后用该对象代替要可视化的对象。如果您要更改原始对象的内容但不替换它,请使用下表中给出的一个 Transfer 方法。这些 API 可同时进行双向数据传输,而无需替换要可视化的对象:

对象提供程序

对象源

TransferData

- 或 -

TransferObject

TransferData

请参见

任务

如何:编写可视化工具

演练:用 C# 编写可视化工具

演练:用 Visual Basic 编写可视化工具

演练:用 Visual Basic 编写可视化工具

概念

可视化工具安全注意事项

其他资源

编写高级可视化工具