我最近为我的应用程序中的一个自定义类型为Visual Studio 2008编写了一个自定义Debugger Visualizer。可视化工具的UI是用WPF编写的,托管在元素主机中,并使用IDialogVisualizerService windowService对象显示。
一切都很好,我的可视化工具加载并显示相关信息,但如果在加载可视化工具后尝试在我的应用程序中“编辑并继续”,则Visual Studio崩溃时没有任何有用的错误消息。
在尝试调试时,我从解决方案中移除了几乎所有代码,直到我只使用ObjectSource序列化字符串并显示一个空元素主机,我仍然在编辑时继续崩溃。如果我删除元素主机并显示WinForms控件或表单,则不会崩溃。
这是Visualizer代码:
using System;
using System.Drawing;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Windows.Forms;
using System.Windows.Forms.Integration;
using Microsoft.VisualStudio.DebuggerVisualizers;
using ObjectVisualizerShared;
using ObjectVisualizerUI;
namespace ObjectVisualizer
{
public class Visualizer : DialogDebuggerVisualizer
{
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
try
{
Stream stream = objectProvider.GetData();
if (stream.Length > 0)
{
BinaryFormatter formatter = new BinaryFormatter();
VisualizerNode node = (VisualizerNode)formatter.Deserialize(stream);
if (node != null)
{
VisualizerWindow window = new VisualizerWindow(node);
ElementHost host = new ElementHost();
host.Child = window;
host.Dock = DockStyle.Fill;
host.Size = new Size(800, 600);
windowService.ShowDialog(host);
}
}
}
catch (Exception ex)
{
MessageBox.Show(string.Format("Error!\n{0}", ex), "Object Visualizer");
}
}
}
}
有什么想法吗?
答案 0 :(得分:0)
虽然我没有找到“正确”的修复方法,但我找到了一个可接受的解决方法。
我将可视化移动到一个完全独立的程序中,然后在我的调试器可视化工具中,我在一个单独的进程中启动可视化程序,并使用命名管道将数据对象发送给它。
这种方法运行良好,并且具有可视化窗口在数据更改和调试会话中保持不变的附加优势。