VS 2010でC#PInvokeから呼び出されたc ++ dllをデバッグする方法があるかどうか疑問に思います。プロジェクトをc#アプリケーションにアタッチしようとしましたが、機能しませんでした。ブレークポイントで停止しませんでした。
また、C ++プロジェクトでOutputDebugStringを使用して何かを記録しようとしましたが、PInvoke呼び出しで何も出力されませんでした。これらの問題にもかかわらず、実際の関数は正常に動作します。
任意のアドバイスをいただければ幸いです。
どちらも同じオプションをオンにする必要があります。[プロジェクト]>[プロパティ]>[デバッグ]タブ>[アンマネージコードのデバッグを有効にする]オプションにチェックマークを付けます。
これで、ネイティブDLLコードにブレークポイントを設定できます。C#プロジェクトがDLLをロードするとすぐに、ブレークポイントが中空から実線に変わります。また、アンマネージデバッグエンジンが使用されているため、OutputDebugString()の出力は[出力]ウィンドウに移動します。
プログラムの実行中にC++デバッガーを実行した場合は、[デバッグ]->[プロセスにアタッチ]->[プロセスを検索してアタッチ]に移動します。あなたはそれをデバッグすることができるはずです。
デバッガシンボルを使用してDLLをコンパイルしたことを確認してください。(.pdb)ファイルであり、それらが実行元のディレクトリにあること。
アタッチするときは、「アタッチ先」の値を「ネイティブ」に変更してください。プロセスはマネージコードデバッガーで実行しないでください。「デバッグ」の代わりに、「実行」コマンドを使用して開始します。
また、適切なデバッグを行うには、DLLをデバッグ情報とともにコンパイルする必要があります。リリースビルドをP/Invokingしていないことを確認してください。
ただし、OutputDebugString()は、デバッグモードに関係なく機能するはずです。