25

VS 2010でC#PInvokeから呼び出されたc ++ dllをデバッグする方法があるかどうか疑問に思います。プロジェクトをc#アプリケーションにアタッチしようとしましたが、機能しませんでした。ブレークポイントで停止しませんでした。

また、C ++プロジェクトでOutputDebugStringを使用して何かを記録しようとしましたが、PInvoke呼び出しで何も出力されませんでした。これらの問題にもかかわらず、実際の関数は正常に動作します。

任意のアドバイスをいただければ幸いです。

4

3 に答える 3

46

どちらも同じオプションをオンにする必要があります。[プロジェクト]>[プロパティ]>[デバッグ]タブ>[アンマネージコードのデバッグを有効にする]オプションにチェックマークを付けます。

これで、ネイティブDLLコードにブレークポイントを設定できます。C#プロジェクトがDLLをロードするとすぐに、ブレークポイントが中空から実線に変わります。また、アンマネージデバッグエンジンが使用されているため、OutputDebugString()の出力は[出力]ウィンドウに移動します。

于 2012-09-20T16:41:24.390 に答える
3

プログラムの実行中にC++デバッガーを実行した場合は、[デバッグ]->[プロセスにアタッチ]->[プロセスを検索してアタッチ]に移動します。あなたはそれをデバッグすることができるはずです。

デバッガシンボルを使用してDLLをコンパイルしたことを確認してください。(.pdb)ファイルであり、それらが実行元のディレクトリにあること。

于 2012-09-20T16:41:08.500 に答える
2

アタッチするときは、「アタッチ先」の値を「ネイティブ」に変更してください。プロセスはマネージコードデバッガーで実行しないでください。「デバッグ」の代わりに、「実行」コマンドを使用して開始します。

また、適切なデバッグを行うには、DLLをデバッグ情報とともにコンパイルする必要があります。リリースビルドをP/Invokingしていないことを確認してください。

ただし、OutputDebugString()は、デバッグモードに関係なく機能するはずです。

于 2012-09-20T16:41:13.623 に答える