.NET特集
 N1.Web関連
 Q1.VS2005自作Visualizer
 R1.OpenCV

VB6特集
 S1.Net関連(95/98)
 S2.Net関連(NT)
 S3.コモンダイアログの拡張
 S4.MailSlot関連
 S5.RAS関連
 S6.セキュリティ関連
 S7.FAX制御(Win2000)
 S8.ADSIの利用
 T1.グラデーションバー
 T2.アイコンメニュー
 T3.バーコード(NW7)

 Visualizerって何?
VSのIDEはとても使いやすく、バージョンアップされる度に機能拡張され、さらに使いやすくなっています。 コード入力の補助(インテリセンス・コードスニペット)は言うまでもなく、デバッグ機能も充実しています。 その中で、Visualizer(デバッガ ビジュアライザ)というものがあります。デバッグ時にはとても役立ちます。

上の例は、String?の場合に利用できるVisualizerです。
VS2005では、これらのVisualizerを自作する事が可能になりました。今回は、Bitmapの場合に、そのイメージを 表示する独自のVisualizerを作ってみましょう。
尚、説明ではプロジェクト名・クラス名などの名前はデフォルト名を利用していますが、実際に作成する場合 は、適宜修正して下さい。
 Bitmap View Visualizerを作ってみよう
■前準備
「新しいプロジェクト」で「クラス ライブラリ」を選択してプロジェクトを作成してください。

■Microsoft.VisualStudio.DebuggerVisualizersを参照
「プロジェクト」-「参照の追加」または、ソリューションエクスプローラの「参照設定」を右クリックで表示される「参照の追加」を選択します。

その中のMicrosoft.VisualStudio.DebuggerVisualizersを参照します。

■名前空間のインポート

Imports Microsoft.VisualStudio.DebuggerVisualizers

Public Class Class1

End Class
■画像を表示するフォームの追加
「プロジェクト」で「Windowsフォームの追加」で「Windowsフォーム」を追加してください。
また、追加されたフォームに「PictureBox」を1つ配置して下さい。

(見栄えを良くする為に、DockプロパティをFill(親コンテナドッキング)に設定)

■DialogDebuggerVisualizerの継承
デバッガサイドのクラスを継承します。

Imports Microsoft.VisualStudio.DebuggerVisualizers

Public Class Class1
    Inherits DialogDebuggerVisualizer

    Protected Overrides Sub Show(ByVal windowService As IDialogVisualizerService, _
                                 ByVal objectProvider As IVisualizerObjectProvider)
    End Sub
End Class
継承されるメソッドはShowのみで、ここで独自の処理を行います。
windowService:Visualizerウインドウ表示制御
objectProvider:デバッガサイドから渡されるオブジェクト
尚、上記ソースの引数は、表示の関係上、名前空間を省略しています。

■呼ばれた時(Show)の処理の実装

Imports Microsoft.VisualStudio.DebuggerVisualizers

Public Class Class1
    Inherits DialogDebuggerVisualizer

    Protected Overrides Sub Show(ByVal windowService As IDialogVisualizerService, _
                                 ByVal objectProvider As IVisualizerObjectProvider)
        Using frm As New Form1
            frm.PictureBox1.Image = CType(objectProvider.GetObject, System.Drawing.Bitmap)
            windowService.ShowDialog(frm)
        End Using
    End Sub
End Class
上記のコードが全てなのですが、これだけでは、VS2005のデバッグ時には利用する事ができません。

■独自のVisualizerをVS2005で利用できるように通知する

<Assembly: DebuggerVisualizer(GetType(Class1), _
           Target:=GetType(System.Drawing.Bitmap), _
           Description:="Bitmap View Visualizer")> 
上記のコードをAssemblyInfo.vbへ追加します。 ここでは、プログラム側のクラスの型、対象となるターゲットの型、実際に表示される名前を指定しています。
 ビルドしてみよう
ビルドが成功したら、まだやるべき事が残っているんです。。。
VS2005の標準ビジュアライザが格納されているフォルダに、作成されたDLLをコピーする必要があります。
<VS Install Dir>\Common7\Packages\Debugger\Visualizers
もしくは
My Documents\Visual Studio 2005\Visualizers

ビルド毎に、DLLをコピーするなんて事は効率が悪いので、blogにも 書いているけど、「ビルドイベント」を利用しましょう。
 

 
「ビルドイベント」ボタンを押下
 

 
「ビルド後に実行するコマンドライン」に
copy "$(TargetPath)" "C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger\Visualizers\"
を入力しておきます。こうしておけば、ビルド後に自動的に格納されます。

 動作確認してみよう
動作確認は特に意識することなく、「新しいプロジェクト」で「Windowsアプリケーション」を選択してプロジェクトを作成してください。
あとは、Bitmapを利用する簡単なプログラムを作成して、ブレークポイント設定後、デバッグして、対象のBitmapにマウスをポイントすれば、 Bitmap View Visualizerが利用できるようになっているはずです。
 

 
Bitmap View Visualizerをクリックすれば、以下のようなフォームが表示されます。
 

 
 いろいろ活用してみて
今回の解説では、画像を表示するビジュアライザを作成しましたが、私が本当に作りたかったのは、 DataSet Visualizerだったんですけどね。(なぜ?)

オリジナルクラスのデバッグに利用できるビジュアライザなんかも作れるので、デバッグし易い環境を自分で作成して、開発効率向上に役立ててみてはどうでしょうか。


Copyright © 2005 tadahiro higuchi. All Rights Reserved.