自習室

こもります

Unity + Visual Studio で、Native Plugin をデバッグする (Windows)

つづき

前回、 Visual Studio を使って Managed(C#)なPluginを作ってUnityVSを使ってデバッグする方法について書きました。

今回はその続きで、Native(C++) な Plugin をつくってデバッグする方法について書きます。そもそもOpenCVを使いたくてプラグイン化をしているので、今回が本命です。

環境

GitHubにあげました

記事はmanaged/nativeで2回に分けましたが、プロジェクトは一つにまとめてあります。

Native Plugin の場合

UnityVS/MS 公式によれば、 UnityVSとしてはサポートしていないことになっています。

今回 Unity 向けに調べるまでは知らなかったのですが、もともとVisual Studioには、Windows上で実行中のプロセスにアタッチしてデバッグを行う機能があります。

やってみます。

実行中のプロセスにアタッチ

デバッグしたい Native Plugin のプロジェクトを選択した状態で、

DEBUG > Attach to Process...

と選び、開いたウィンドウで、 Unity.exe を選択します

f:id:AMANE:20141215223451j:plain

その状態でブレイクしたい箇所にポイントを張って、 Unity Editor から Play すれば、ブレイクしてくれます。

f:id:AMANE:20141215224559j:plain

コールスタックを見ると、 Unity.exe!MonoBehaviour::Update() からDLLの GetRandom() 関数が呼び出されていることがわかっておもしろいです。

ブレイクされないときがあった

私のリポジトリからCloneしたもので、正しくブレイクに引っかかったくれなかった場合は、一度Unityを閉じてから、Visual Studio の方で Plugin をビルドし直し、Unityの Assets/Plugins のdllを上書きしてから再度実行すると、引っかかるようになります。

最後に

これで Native Plugin もデバッグができるようになりました。前々回の記事で OpenCV を Native Plugin 化しましたが、こちらの場合でもちゃんとブレイクできることを確認しています。