0

最近、アプリケーションのカスタム タイプの 1 つに対して、Visual Studio 2008 用のカスタム Debugger Visualizer を作成しました。ビジュアライザーの UI は WPF で記述され、要素ホストでホストされ、IDialogVisualizerService windowService オブジェクトを使用して表示されます。

すべてがうまく機能し、ビジュアライザーが読み込まれて関連情報が表示されますが、ビジュアライザーの読み込み後にアプリケーションで「編集して続行」しようとすると、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");
            }
        }
    }
}

何か案は?

4

1 に答える 1

0

「適切な」修正は実際には見つかりませんでしたが、許容できる回避策を見つけました。

ビジュアライゼーションを完全に別のプログラムに移動し、デバッガー ビジュアライザーで別のプロセスでビジュアライゼーション プログラムを開始し、名前付きパイプを使用してデータ オブジェクトをそれに送信しました。

これはうまく機能しており、視覚化ウィンドウがデータの変更やデバッグ セッション全体で持続するという追加の利点があります。

于 2010-04-09T00:46:12.870 に答える