可视化工具体系结构

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

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

  • 调试对象端 在处理 Visual Studio 中运行调试 (调试对象)。

可视化工具是调试器显示的调试器可视化元素 () 一个数据对象的内容的一种有意义,借助它 某些可视化工具还支持数据对象编辑。 通过编写自定义可视化工具,可以处理扩展调试器您的自定义数据类型。

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

调试器进程

调试对象进程

调试器用户界面 (ui) 中, " 监视 " 窗口, ")

要可视化的数据对象

若要在调试器界面中可视化数据对象,则需要代码间通信两个进程。 因此,可视化工具体系结构由两部分组成: 调试器端 代码与调试对象 端 代码。

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

调试器端

调试对象端

DialogDebuggerVisualizer 类

IDialogVisualizerService 界面

数据对象

用户界面从获取数据对象提供可视化,在调试器端存在:

调试器端

调试对象端

DialogDebuggerVisualizer 类

IDialogVisualizerService 界面

数据对象

对象提供程序 (实现 IVisualizerObjectProvider)

在调用对象源的调试对象端中的相应对象:

调试器端

调试对象端

DialogDebuggerVisualizer 类

IDialogVisualizerService 界面

数据对象

对象提供程序 (实现 IVisualizerObjectProvider)

对象源 (从派生 VisualizerObjectSource)

对象提供程序提供要可视化向可视化工具用户界面的对象数据。 对象提供程序从对象源获得对象数据。 对象提供程序和对象源提供了 API 以及在调试器和调试对象端之间的对象数据。

必须获得要可视化的数据对象每个可视化工具。 下表显示相应 API,对象提供程序和对象源用于此用途:

对象提供程序

对象源

GetData

—或 -

GetObject

GetData

通知对象提供程序可使用 GetDataGetObject。 在调用的任何一个 API 结果对象源的 GetData 。 为 VisualizerObjectSource.GetData 的调用填充 [System.IO.Stream],表示对象的已序列化的方式可视化。

IVisualizerObjectProvider.GetObject 将数据传回对象形式,可以在 UI 中显示该用 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 编写可视化工具

概念

可视化工具安全注意事项