方法 : ビジュアライザーを記述する
Object および Array を除く任意のマネージ クラスのオブジェクトのカスタム ビジュアライザーを記述できます。
デバッガー ビジュアライザーのアーキテクチャには、次の 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 メソッドをオーバーライドする必要があります。