つづき
前回、 Visual Studioを使って Managed(C#)なPluginを作ってUnityVSを使ってデバッグする方法について書きました。
Unity + Visual Studio で、Managed Plugin をデバッグする (Windows) - 自習室
今回はその続きで、Native(C++) な Plugin をつくってデバッグする方法について書きます。そもそもOpenCVを使いたくてプラグイン化をしているので、今回が本命です。
環境
- Windows 8.1 pro 64bit
- Unity 4.6.0f3 pro
- Visual Studio 2013 Community
GitHubにあげました
記事はmanaged/nativeで2回に分けましたが、プロジェクトは一つにまとめてあります。
Native Plugin の場合
UnityVS/MS 公式によれば、 UnityVSとしてはサポートしていないことになっています。
今回 Unity 向けに調べるまでは知らなかったのですが、もともとVisual Studioには、Windows上で実行中のプロセスにアタッチしてデバッグを行う機能があります。
やってみます。
実行中のプロセスにアタッチ
デバッグしたい Native Plugin のプロジェクトを選択した状態で、
DEBUG > Attach to Process...
と選び、開いたウィンドウで、 Unity.exe を選択します
その状態でブレイクしたい箇所にポイントを張って、 Unity Editor から Play すれば、ブレイクしてくれます。
コールスタックを見ると、 Unity.exe!MonoBehaviour::Update()
からDLLの GetRandom()
関数が呼び出されていることがわかっておもしろいです。
ブレイクされないときがあった
私のリポジトリからCloneしたもので、正しくブレイクに引っかかったくれなかった場合は、一度Unityを閉じてから、Visual Studioの方で Plugin をビルドし直し、Unityの Assets/Plugins のdllを上書きしてから再度実行すると、引っかかるようになります。
最後に
これで Native Plugin もデバッグができるようになりました。前々回の記事で OpenCVを Native Plugin 化しましたが、こちらの場合でもちゃんとブレイクできることを確認しています。