方法 : ビジュアライザーを記述する
Object および Array を除く任意のマネージ クラスのオブジェクトのカスタム ビジュアライザーを記述できます。
注意
ストア アプリでは、標準的なテキスト、HTML、XML、および JSON ビジュアライザーがサポートされています。カスタム (ユーザーが作成した) ビジュアライザーはサポートされていません。
デバッガー ビジュアライザーのアーキテクチャには、次の 2 つの部分があります。
デバッガー側 - Visual Studio デバッガー内で動作します。 デバッガー側のコードは、ビジュアライザーのユーザー インターフェイスを作成し、表示します。
デバッグ対象側 - Visual Studio がデバッグしているプロセス (デバッグ対象) 内で動作します。
視覚化するデータ オブジェクト (String オブジェクトなど) は、デバッグ対象プロセスに存在します。 このためデバッグ対象側では、そのデータ オブジェクトをデバッガー側に送る必要があります。これによって、デバッガー側では、作成したユーザー インターフェイスを使ってデータ オブジェクトを表示できるようになります。
デバッガー側は、IVisualizerObjectProvider インターフェイスを実装するオブジェクト プロバイダーから、視覚化するデータ オブジェクトを受け取ります。 デバッグ対象側は、VisualizerObjectSource から派生するオブジェクト ソースを介してデータ オブジェクトを送ります。 オブジェクト プロバイダーは、オブジェクト ソースにデータを戻すこともできます。このため、データの表示だけでなく編集もできるビジュアライザーを記述できます。 オブジェクト プロバイダーは、式エバリュエーターと通信することでオブジェクト ソースと通信するようにオーバーライドできます。
デバッグ対象側とデバッガー側は、Stream を介して相互に通信します。 データ オブジェクトを Stream にシリアル化し、Stream をデータ オブジェクトに逆シリアル化するメソッドが用意されています。
デバッグ対象側のコードは、DebuggerVisualizer 属性 (DebuggerVisualizerAttribute) で指定します。
デバッガー側でビジュアライザー ユーザー インターフェイスを作成するには、DialogDebuggerVisualizer を継承するクラスを作成し、DialogDebuggerVisualizer.Show メソッドをオーバーライドしてインターフェイスを表示する必要があります。
IDialogVisualizerService を使用すると、Windows フォーム、ダイアログ、およびコントロールをビジュアライザーによって表示できます。
ジェネリック型のサポートは制限されています。 ジェネリック型がオープン型の場合にのみ、そのジェネリック型のビジュアライザーを記述できます。 この制限は、DebuggerTypeProxy 属性を使用する場合の制限と同じです。 詳細については、「DebuggerTypeProxy 属性の使用」を参照してください。
カスタムのビジュアライザーでは、セキュリティについての配慮が必要な場合があります。 「ビジュアライザーのセキュリティに関する考慮事項」を参照してください。
以下の手順は、ビジュアライザーの作成に必要な作業の概要を示したものです。 詳細については、「チュートリアル : C# でビジュアライザーを記述する」を参照してください。
デバッガー側を作成するには
IVisualizerObjectProvider メソッドを使用して、視覚化するオブジェクトをデバッガー側で取得します。
DialogDebuggerVisualizer を継承するクラスを作成します。
DialogDebuggerVisualizer.Show メソッドをオーバーライドしてインターフェイスを表示します。 IDialogVisualizerService メソッドを使用して、Windows フォーム、ダイアログ、およびコントロールをインターフェイスの一部として表示します。
DebuggerVisualizerAttribute をビジュアライザー (DialogDebuggerVisualizer) に適用します。
デバッグ対象側を作成するには
DebuggerVisualizerAttribute をビジュアライザー (DialogDebuggerVisualizer) とオブジェクト ソース (VisualizerObjectSource) に適用します。 オブジェクト ソースを省略すると、既定のオブジェクト ソースが使用されます。
ビジュアライザーでデータ オブジェクトを表示するだけでなく、編集できるようにする場合は、VisualizerObjectSource の TransferData メソッドまたは CreateReplacementObject メソッドをオーバーライドする必要があります。