2010-04-06 34 views
0

我最近写了一个自定义调试器可视为Visual Studio 2008在我的应用程序自定义类型之一。用于可视化的UI被写入WPF和在元件的主机托管并使用IDialogVisualizerService windowService对象示出。调试器可视,ElementHost的,和编辑并继续问题

一切都很正常,我的可视化加载和显示相关信息,但如果试图“编辑并继续”在我的应用程序加载的可视化工具,Visual Studio的崩溃,并没有有用的错误消息后。

在试图调试这个时,我将几乎所有的代码从解决方案中移除到只使用ObjectSource序列化字符串并显示一个空元素主机的位置,并且仍然在编辑时继续发生崩溃。如果我删除元素主机并显示一个WinForms控件或窗体,则不会崩溃。

下面是可视化代码:

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

虽然我并没有真正找到一个“正确”的修复,我发现了一个可以接受的解决办法。

我移动可视化到一个完全独立的程序,然后在我的调试器可视我开始在一个单独过程中的可视化程序和予使用命名管道发送数据对象到它。

这是运作良好,并有额外的好处,在可视化窗口跨数据变化和调试会话持久。