用 10 行代码创建调试器可视化工具
一篇关于Visual Studio 2005中调试器可视化工具的文章。
引言
Visual Studio 2005发布了一个非常好的功能,叫做调试器可视化工具。根据其名称,调试器可视化工具允许您在调试期间以可视方式查看有关对象的有用信息。尝试在具有DataSet
对象的应用程序中放置一个断点,并将鼠标悬停在其变量上。您会得到一个包含各种信息的工具提示和一个带有放大镜的小图标。单击该图标,您将获得一个显示DataSet
对象的基础数据的窗体。
事实证明,Visual Studio团队使得为其他数据类型添加此功能变得非常容易。在本文中,我将展示如何创建一个调试器可视化工具来查看Image
对象。
对于任何编写操作图像的应用程序的人来说,此可视化工具都非常有用。您可以在算法中的任何位置放置一个断点,并查看该时间点的图像是什么样子。
使用代码
在下面,您可以看到我的图像调试器可视化工具的完整代码
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.VisualStudio.DebuggerVisualizers;
using System.Windows.Forms;
using System.Drawing;
[assembly: System.Diagnostics.DebuggerVisualizer(
typeof(ImageVisualizer.DebuggerSide),
typeof(VisualizerObjectSource),
Target = typeof(System.Drawing.Image),
Description = "Image Visualizer")]
namespace ImageVisualizer
{
public class DebuggerSide : DialogDebuggerVisualizer
{
override protected void Show(IDialogVisualizerService windowService,
IVisualizerObjectProvider objectProvider)
{
Image image = (Image)objectProvider.GetObject();
Form form = new Form();
form.Text = string.Format("Width: {0}, Height: {1}",
image.Width, image.Height);
form.ClientSize = new Size(image.Width, image.Height);
form.FormBorderStyle = FormBorderStyle.FixedToolWindow;
PictureBox pictureBox = new PictureBox();
pictureBox.Image = image;
pictureBox.Parent = form;
pictureBox.Dock = DockStyle.Fill;
windowService.ShowDialog(form);
}
}
}
让我们解释一下这里的内容。
我创建了一个类库项目,添加了一个新类并从DialogDebuggerVisualizer
(位于Microsoft.VisualStudio.DebuggerVisualizers
命名空间中)继承。我将DebuggerVisualizer
属性添加到程序集中,以便Visual Studio IDE知道如何使用此可视化工具。可自定义的参数是Target
(要显示可视化工具的类型)和Description
。
接下来,我重写了protected
方法Show
。此方法为我们提供了两个参数:objectProvider
保存了我们要查看的调试对象的序列化副本,windowService
允许我们在IDE的上下文中显示一个对话框。在此方法中,我动态地创建了一个带有图片框的窗体,并将图像加载到其中。当然,您可以将一个窗体类添加到项目中并在设计时创建该窗体,但为了简单起见,我选择了动态的方式。如您所见,只需要10行代码(不包括属性和样板代码)。
部署程序集
为了使Visual Studio使用我们的调试器可视化工具,我们必须将DLL放入<Visual Studio 安装目录>\Common7\Packages\Debugger\Visualizers中。
关注点
调试器可视化工具处理的类型必须是可序列化的。这是必要的,因为objectProvider
参数为您提供了一个对象的序列化副本。
您可以让您的调试器可视化工具操作其副本,并将更改保存到调试对象。查看objectProvider
参数中的ReplaceData
和ReplaceObject
方法。
您可以为单个类型创建多个调试器可视化工具。您可以通过展开放大镜图标旁边的下拉菜单来选择所需的可视化工具。
还有另一种方法来指定哪个调试器可视化工具将与类型一起使用。只需将DebuggerVisualizer
属性添加到要在可视化工具中显示的类,并将可视化工具类型作为参数传递即可。这样,您不必在可视化工具级别指定它将处理的所有类。但是,这意味着您必须是编码由可视化工具处理的类的人,而对于Image
类来说,显然不是这种情况。
您可以尝试“添加新项”对话框中显示的“调试器可视化工具”模板。使用此模板,您可以快速获得一个具有必要的using
语句、继承和重写的类。