2

我在 VS2008 中创建了一个调试器可视化工具。我在同一个 .dll 中创建了两个类:-

  • BinaryDataDebuggerVisualizer
  • ImageDebuggerVisualizer

图像一个工作正常(例如,放大镜出现在调试模式下)但不适用于 byte[] 一个(BinaryDataDV)。我的可视化工具所做的是将二进制数据显示为模式窗口中的图像(如果数据是合法图像)。我在发布模式下编译为代码,然后将 .dll 放入 C:\Users\\Documents\Visual Studio 2008\Visualizers

这是我用来“定义”视觉的代码...

使用

System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using Microsoft.VisualStudio.DebuggerVisualizers;
using Foo.DebuggerVisualizers;  

[assembly: DebuggerVisualizer(
    typeof (BinaryDataDebuggerVisualizer),
    typeof (VisualizerObjectSource),
    Target = typeof (byte[]),
    Description = "Binary Data to Image Visualizer")]

namespace Foo.DebuggerVisualizers
{
    public class BinaryDataDebuggerVisualizer : DialogDebuggerVisualizer
    {
        protected override void Show(IDialogVisualizerService windowService,
           IVisualizerObjectProvider objectProvider)
        {
            ... my code in here
        }
     }
}

我在调试器可视化解决方案中进行了单元测试,它启动并测试代码..它正确地显示了一个合法(也是非法的)图像文件。所以我相信代码没问题。

当我在真正的解决方案中时,这就是我正在做的事情(当我在调试模式下将鼠标悬停在变量上时,我希望放大镜显示)。

byte[] data = File.ReadAllBytes("Chick.jpg");

data然后,当我在调试时暂停代码时,我将鼠标悬停在该变量上(使用断点)。

没有沙漏:(

任何人对什么是错的有任何想法?

4

1 回答 1

8

不幸的是,这是不可能的。Debugger Visualizer 框架中有一个限制,阻止它们在数组类型或对象上运行。

http://msdn.microsoft.com/en-us/library/e2zc529c.aspx

从页面引用:“您可以为除 Object 或 Array 之外的任何托管类的对象编写自定义可视化器”

于 2008-12-06T10:21:43.057 回答