Visual Stduio で libclang.dll のデバッグ環境

今後の事を考えるとあった方が便利かなー、と思い用意しました。
libclang.dll というか、dll のデバッグ環境ですね。
Visual Studio 上で libclang.dll のステップ実行とかを行います。
※以下 llvm のビルドが出来ること前提です。

[必要なもの]

[Visual Studio のソリューションを用意]

llvm/clang では cmake を使用して環境を構築するので、次のコマンドで Visual Studio 用の環境を出力することが出来ます。

cmake -G "Visual Studio 10" ..\llvm

これで Visual Studio のソリューションが出力されるので、Visual Studioデバッグビルドして、デバッグ用の libclang.dll を出力します。

[プロセスにアタッチ]

デバッグ用の libclang.dll の作成が終わったら次は libclang.dll をロードしているプロセスに Visual Studio からアタッチしたいと思います。
今回は、gvim の clang_complete (又は、neocomplcache-clang) が libclang.dll をロードしているので、gvim のプロセスにアタッチしてみたいと思います。
この場合は Visual Studio で出力された libclang.dll がロードされるように

let g:clang_library_path = "D:/LLVM/BUILD_msvc/bin/Debug"

libclang.dll の出力ディレクトリを設定しておく必要があります。

1.gvim を起動

gvim を起動して、clang_complete で C++ の補完がされることを確認します。

2.gvim のプロセスにアタッチ

Visual Studio のメニューの【デバッグ】→【アタッチ】を開き、【アタッチ先】からすでに起動している gvim のプロセスを選択してアタッチします。
これで、Visual Studio 上で、libclang.dll の処理を見ることが出来ます。

2.ブレークポイントを設置

Visual Studioブレークポイントを設定して、libclang.dll の処理を確認してみたいと思います。
とりあえず、clang_parseTranslationUnit 関数にブレークポイントを設置してみます。
(clang_parseTranslationUnit は、C++ のソースをパースする時に呼ばれる関数)


そして gvim のプロセスにアタッチしている状態で、C++ のコード補完を行うと…。



おーちゃんと止まってくれました!
これで、トレース実行や変数の中身、引数の確認なんかを Visual Studio 上で行うことが出来ます。やったね!
他にも Visual Studio 上から直接起動して libclang.dll をロードする方法もありますが、それは次回書きます。

[注意]

プロセスにアタッチしても、Visual Studio 上のブレークポイントで止まらない場合は、デバッグ用の libclang.dll が正しくロードされていない(違う libclang.dll をロードしている)可能性があるので、パス等を確認してみてください。