夕暮ログ

C#やJavascript、最近はAndroidなんかも好きなtinqのブログ。「夕暮れログ」

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

デバッガビジュアライザ(2)基本的な作り方

基本的な作り方を紹介します。今回は、stringをMessageBoxで表示します。MSDNを参考にしています。
VisualStudio2008なので、違うバージョンの場合は多少違うかもしれませんが、大して変わらないと思われます。
ややこしく見えますが、実際にやってみると結構簡単に作ることができます。

(1)新しいプロジェクトの作成

まず、新しいプロジェクトを作成します。 デバッガビジュアライザを作るときは、DLLになるので「クラス ライブラリ」を選択してください。

(2)デバッガビジュアライザを追加

[プロジェクト]=>[新しい項目の追加]を選びます
(「デバッグビジュアライザ」を選択します。適当にわかりやすい名前をつけてOKを押します。
これだけで、必要な設定がまとめて終了します。

これを使わないで、自分で設定する方法はこちら

(3)基本コード

まず、Show関数の中身を消去して、空っぽにしてしまってください。
内容を表示する対象は、objectProvider.GetObject();で取得できます。この場合、string型が入るので、そのままキャストして取得します。
string str = (string)objectProvider.GetObject();

これを取得できれば、後は煮るなり焼くなりするだけです。
とりあえず、メッセージボックスで表示させましょう。
MessageBox.Show(str);
これで一番簡易的なデバッガビジュアライザができました。
ですが、実際につかうにはもう少しやることがあります。

(4)ビジュアライザとして指定する

以下のようにコードを書きます。これでデバッガビジュアライザの対象などを指定します。
[assembly: System.Diagnostics.DebuggerVisualizer(
typeof(デバッガビジュアライザのクラス),
typeof(VisualizerObjectSourceを継承したクラス),
Target = typeof(対象の型),
Description = "説明")]
結局、このようなコードになったはずです。
using Microsoft.VisualStudio.DebuggerVisualizers;
using System;
using System.Windows.Forms;

[assembly: System.Diagnostics.DebuggerVisualizer(
typeof(ClassLibrary1.DebuggerTest),
typeof(VisualizerObjectSource),
Target = typeof(System.String),
Description = "My First Visualizer")]
namespace ClassLibrary1
{
    public class DebuggerTest : DialogDebuggerVisualizer
    {
        protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
        {
            string str = (string)objectProvider.GetObject();
            MessageBox.Show(str);
        }

        public static void TestShowVisualizer(object objectToVisualize)
        {
            VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(DebuggerTest));
            visualizerHost.ShowVisualizer();
        }
    }
}

これでデバッガビジュアライザ完成です。
ためしにビルドしてみてください。もしエラーが出る場合はそれを修正します。
しかし、DLL単体では起動できないので、すぐに確認というわけにはいきません。


すぐさまインストールしてもいいですが、うまく動作するか確認を行います。

(5)確認用プロジェクトの追加

先ほど書いたように、DLL単体では起動できないため、確認用のプロジェクトを追加します。
ソリューションエクスプローラを開き、一番上にある「ソリューション 'ClassLibrary1'」などと書いてある部分を右クリックします。
出てきたメニューから、「新しいプロジェクト」を選びます。ここで、保存せずに作業をしていた場合は保存をする必要があります。
([ファイル]=>[新しいプロジェクト]でも追加できます)

適当に、コンソールアプリケーションを選びます。プロジェクト名にもわかりやすい名前をつけておくといいです。
場所もデバッガビジュアライザのプロジェクトのフォルダの中にでも入れておくといいと思います。
そして、OKを押します。


(6)追加したプロジェクトの設定

追加されたプロジェクトを右クリックし、「スタートアッププロジェクトに設定」をクリックします。


スタートアッププロジェクトとは、実行をしたときにどれが起動されるか、という設定です。この場合は、追加したコンソールアプリケーションを起動させてやります。

続いて、追加したプロジェクトの「参照設定」を右クリックして、「参照の追加」ダイアログボックスを表示させます。
「.NET」の中から「Microsoft.VisualStudio.DebuggerVisualizers」を追加します。
さらに、もう一度「参照の追加」を開いて、今度は「参照」タブでデバッガビジュアライザのプロジェクトのDLLを指定してOKを押します。一度ビルドしていないとDLLができていないので、ない場合は一度ビルドしてください。

(7)テストする

最後にコードを書きます。
追加したコンソールアプリケーションのプロジェクトのほうを以下のようにします。
namespace DebuggerTester
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "Hello!";
            ClassLibrary1.DebuggerTest.TestShowVisualizer(str);
        }
    }
}
そして、ビルド!
コンソールが表示され、メッセージボックスで、「Hello!」と表示されるはずです。

若干味気ないですが、これはあくまでテストですので。


(8)インストールする

テストでバグがないか確認したらインストールします。
インストールは指定のフォルダにコピーするだけです。
ビルドされてできたDLLを以下の場所にコピーします。
インストール パス\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers インストールパスは、XPなら「c:\Profram Files」になります。
また、VisualStudio2008では、「Microsoft Visual Studio 10.0」は「Microsoft Visual Studio 9.0」です。

もしくは、 マイドキュメント\Visual Studio 2010\Visualizers でもOKです。もちろん、「Visual Studio 2010」は「Visual Studio 2008」だったりします。

(9)使う

コピーをしたらインストール完了です。
ためしに、先ほど追加したテスト用プロジェクトのコードを以下のようになおしてください。
 string str = "Hello!";
System.Console.WriteLine(str);
そしたら、WriteLineのところにブレークポイントを張って、[F5]を押してデバッグを開始してみてください。
WriteLineでとまるので、strにマウスをあわせ、虫眼鏡マークをクリックします。
すると、先ほど作った、「My First Visualizer」が表示されています。

それをクリックすると、ちゃんとメッセージボックスがでます!!
ちなみに、チェックがついているものは虫眼鏡をクリックするだけで起動できます。





最後に

長々と書きましたが、これで基本編が終了です。
続いて、使う関数についてもう少し詳しく説明します。
ちなみに、このままだと変更を加えるたびに毎回コピーする必要があって、不便です。自動コピーの設定もまた今度説明します。
関連記事

コメント

ここをクリックしてコメントを投稿

非公開コメント

トラックバック

http://tinqwill.blog59.fc2.com/tb.php/28-ab811341

« next  ホーム  prev »

プロフィール

tinq tinq(もしくはTinqWill)

Sky  For   Every 改装予定

プログラミングお勉強中の高校生。月一くらいは更新したい

最新記事

カテゴリ

月別アーカイブ

検索フォーム

最新コメント

リンク

最新トラックバック

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。