方法 : ビジュアライザを記述する
更新 : 2007 年 11 月
このトピックの内容は、次の製品に該当します。
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
マネージのみ |
|||
Standard |
マネージのみ |
|||
Pro/Team |
マネージのみ |
表の凡例 :
対象 |
|
該当なし |
|
既定で非表示のコマンド |
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 メソッドをオーバーライドする必要があります。