ビジュアライザのアーキテクチャ
更新 : 2007 年 11 月
このトピックの内容は、次の製品に該当します。
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
マネージのみ |
|||
Standard |
マネージのみ |
|||
Pro/Team |
マネージのみ |
表の凡例 :
対象 |
|
該当なし |
|
既定で非表示のコマンド |
デバッガ ビジュアライザのアーキテクチャには、次の 2 つの部分があります。
デバッガ側 - Visual Studio デバッガ内で動作します。デバッガ側のコードは、ビジュアライザのユーザー インターフェイスを作成し、表示します。
デバッグ対象側 - Visual Studio がデバッグしているプロセス (デバッグ対象) 内で動作します。
ビジュアライザは、データ オブジェクトの内容を、意味のある理解しやすい形式で表示 (視覚化) できるようにするためのデバッガのコンポーネントです。データ オブジェクトの編集をサポートするビジュアライザもあります。カスタム ビジュアライザを作成すれば、独自のデータ型を処理できるようにデバッガを拡張することも可能です。
視覚化対象であるデータ オブジェクトは、デバッグ中のプロセス (デバッグ対象プロセス) 内に存在します。データを表示するユーザー インターフェイスは、Visual Studio デバッガ プロセス内で作成されます。
デバッガ プロセス |
デバッグ対象プロセス |
---|---|
デバッガのユーザー インターフェイス (データヒント、ウォッチ ウィンドウ、クイック ウォッチ) |
視覚化の対象となるデータ オブジェクト |
デバッガのインターフェイス内でデータ オブジェクトを視覚化するには、2 つのプロセス間の通信を実現するためのコードを記述する必要があります。したがって、ビジュアライザのアーキテクチャは、デバッガ側コードとデバッグ対象側コードという、2 つの要素で構成されることになります。
デバッガ側コードでは、自身のユーザー インターフェイスが作成されます。このインターフェイスは、デバッガのインターフェイス (データヒント、ウォッチ ウィンドウ、またはクイック ウォッチ) から呼び出すことができます。ビジュアライザのインターフェイスは、DialogDebuggerVisualizer クラスおよび IDialogVisualizerService インターフェイスを使用して作成します。ビジュアライザのすべての API に共通することですが、DialogDebuggerVisualizer および IDialogVisualizerService は、Microsoft.VisualStudio.DebuggerVisualizers 名前空間に存在します。
デバッガ側 |
デバッグ対象側 |
---|---|
DialogDebuggerVisualizer クラス IDialogVisualizerService インターフェイス |
データ オブジェクト |
ユーザー インターフェイスは、視覚化の対象となるデータを、デバッガ側に存在するオブジェクト プロバイダから取得します。
デバッガ側 |
デバッグ対象側 |
---|---|
DialogDebuggerVisualizer クラス IDialogVisualizerService インターフェイス |
データ オブジェクト |
オブジェクト プロバイダ (IVisualizerObjectProvider を実装) |
デバッグ対象側には、対応するオブジェクトが存在します。これをオブジェクト ソースと呼びます。
デバッガ側 |
デバッグ対象側 |
---|---|
DialogDebuggerVisualizer クラス IDialogVisualizerService インターフェイス |
データ オブジェクト |
オブジェクト プロバイダ (IVisualizerObjectProvider を実装) |
オブジェクト ソース (VisualizerObjectSource から派生) |
オブジェクト プロバイダは、視覚化の対象となるオブジェクト データをビジュアライザの UI に提供します。オブジェクト プロバイダは、このオブジェクト データをオブジェクト ソースから取得します。オブジェクト プロバイダおよびオブジェクト ソースには、デバッガ側とデバッグ対象側との間でオブジェクト データをやり取りするための API が用意されています。
ビジュアライザはすべて、視覚化の対象となるデータ オブジェクトを取得する必要があります。次の表は、この目的で使用されるオブジェクト プロバイダの API と、それに対応するオブジェクト ソースの API を示しています。
オブジェクト プロバイダ |
オブジェクト ソース |
---|---|
または |
オブジェクト プロバイダには、GetData と GetObject の 2 つの API が存在しています。どちらの API を使用しても、オブジェクト ソースの GetData が呼び出されます。VisualizerObjectSource.GetData を呼び出すと、視覚化の対象となるオブジェクトがシリアル化されて [System.IO.Stream] に格納されます。
IVisualizerObjectProvider.GetObject では、データがオブジェクト形式へと逆シリアル化されるため、このデータをそのまま DialogDebuggerVisualizer で作成した UI に表示できます。IVisualizerObjectProvider.GetData では、データが未加工の [System.IO.Stream] として格納されるため、これは別途、逆シリアル化する必要があります。IVisualizerObjectProvider.GetObject は、IVisualizerObjectProvider.GetData を呼び出し、シリアル化された [System.IO.Stream] を受け取り、そのデータを逆シリアル化することによって機能します。オブジェクトを .NET でシリアル化できないなど、カスタムのシリアル化が必要な場合は、IVisualizerObjectProvider.GetData を使用してください。そのような場合は、VisualizerObjectSource.Serialize メソッドをオーバーライドする必要があります。シリアル化できるオブジェクトの詳細については、「シリアル化」を参照してください。
読み取り専用のビジュアライザを作成する場合は、GetData または GetObject を使った一方向の通信で十分です。データ オブジェクトの編集をサポートするビジュアライザを作成する場合、それだけでは不十分です。オブジェクト プロバイダからオブジェクト ソースへと、データ オブジェクトを戻す機能が必要となります。次の表は、この目的で使用される、オブジェクト プロバイダとオブジェクト ソースの API を示しています。
オブジェクト プロバイダ |
オブジェクト ソース |
---|---|
または |
ここでも、オブジェクト プロバイダには、使用できる API が 2 つ存在します。データは常に [System.IO.Stream] としてオブジェクト プロバイダからオブジェクト ソースへと送られますが、ReplaceData の場合は、別途、オブジェクトを [System.IO.Stream] にシリアル化する処理が必要となります。
ReplaceObject は、指定したオブジェクトを受け取り、それを [System.IO.Stream] にシリアル化した後、ReplaceData を呼び出して、[System.IO.Stream] を CreateReplacementObject に送ります。
いずれかの Replace メソッドを使用すると、視覚化対象であるオブジェクトを置き換える新しいデータ オブジェクトがデバッグ対象側に作成されます。オブジェクトそのものを置き換えずに、元のオブジェクトの内容を変更する場合は、次の表に示した、いずれかの Transfer メソッドを使用してください。これらの API では、視覚化対象であるオブジェクトを置き換えることなく、データが双方向で同時に転送されます。
オブジェクト プロバイダ |
オブジェクト ソース |
---|---|
または |
参照
処理手順
チュートリアル : Visual Basic でビジュアライザを記述する
チュートリアル : Visual Basic でビジュアライザを記述する