如何:编写可视化工具
本主题适用于:
版本 |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
学习版 |
仅限托管 |
||||
专业版、高级专业版和旗舰版 |
仅限托管 |
可以为任何托管类(除 Object 或 Array 之外)的对象编写自定义可视化工具。
调试器可视化工具的结构由两部分组成:
“调试器端”在 Visual Studio 调试器中运行。 调试器端代码创建并显示可视化工具的用户界面。
“调试对象端”在 Visual Studio 正在调试的进程(“调试对象”)中运行。
要可视化的数据对象(如 String 对象)存在于调试对象进程中。 因此,调试对象端必须将数据对象发送到调试器端,然后调试器端可以使用您创建的用户界面进行显示。
调试器端从实现 IVisualizerObjectProvider 接口的“对象提供程序”接收要可视化的数据对象。 调试对象端通过从 VisualizerObjectSource 派生的“对象源”发送数据对象。 对象提供程序还可以将数据发送回对象源,这样您便能够编写可编辑并显示数据的可视化工具。 可以重写此对象提供程序,以便与表达式计算器进行对话,进而与对象源进行对话
调试对象端和调试器端通过 Stream 相互通信。 提供了将数据对象序列化为 Stream 以及将 Stream 反序列化为数据对象的方法。
调试对象端代码是使用 DebuggerVisualizer 特性 (DebuggerVisualizerAttribute) 指定的。
若要在调试器端创建可视化工具用户界面,必须创建从 DialogDebuggerVisualizer 继承的类,并且重写 DialogDebuggerVisualizer.Show 方法来显示界面。
可以使用 IDialogVisualizerService 通过可视化工具显示 Windows 窗体、对话框和控件。
对泛型类型的支持是有限的。 只有在一个泛型类型是开放类型时,才可以为属于该泛型类型的目标编写可视化工具。 此限制与使用 DebuggerTypeProxy 特性时的限制相同。 有关详细信息,请参见使用 DebuggerTypeProxy 特性。
自定义可视化工具可能有安全性问题。 请参见可视化工具安全注意事项。
下面的过程高度概括了创建可视化工具时所需完成的操作。 有关更多详细说明,请参见演练:用 C# 编写可视化工具。
创建调试器端
使用 IVisualizerObjectProvider 方法在调试器端获取可视化的对象。
创建一个从 DialogDebuggerVisualizer 继承的类。
重写 DialogDebuggerVisualizer.Show 方法以显示接口。 使用 IDialogVisualizerService 方法将 Windows 窗体、对话框和控件显示为界面的一部分。
应用 DebuggerVisualizerAttribute,为它指定可视化工具 (DialogDebuggerVisualizer)。
创建调试对象端
应用 DebuggerVisualizerAttribute,为它指定可视化工具 (DialogDebuggerVisualizer) 和对象源 (VisualizerObjectSource)。 如果省略对象源,则使用默认对象源
如果希望可视化工具能够编辑和显示数据对象,则需要重写 VisualizerObjectSource 中的 TransferData 或 CreateReplacementObject 方法。