デバッガービジュアライザー、ElementHost、および編集および継続的な問題
-
24-09-2019 - |
質問
私は最近、私のアプリケーションのカスタムタイプの1つについて、Visual Studio 2008のカスタムデバッガーVisualizerを書きました。 VisualizerのUIはWPFで記述され、要素ホストでホストされ、IdialogVisualizerservice Windowserviceオブジェクトを使用して表示されます。
すべてがうまく機能し、Visualizerは関連情報をロードして表示しますが、Visualizerを読み込んだ後にアプリケーションで「編集および続行」しようとすると、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");
}
}
}
}
何か案は?
解決
「適切な」修正は本当に見つかりませんでしたが、許容できる回避策を見つけました。
視覚化を完全に独立したプログラムに移し、デバッガービジュアライザーで別のプロセスで視覚化プログラムを開始し、名前付きパイプを使用してデータオブジェクトを送信します。
これはうまく機能しており、視覚化ウィンドウがデータの変更とデバッグセッション全体で持続するという追加の利点があります。
所属していません StackOverflow