web-dev-qa-db-ja.com

C#からアンマネージDLLをデバッグできません

C++で記述され、C#アプリケーションから呼び出されたDLLがあります。DLLはアンマネージコードです。

ビルド後のイベントを含むDLLファイルとその.pdbファイルをC#アプリのデバッグ実行dirにコピーしても、ブレークポイントに到達できません。 DLLコードに。ブレークポイントには、「このドキュメントにはシンボルがロードされていません」というメッセージが添付されています。

dllソースでデバッグを取得するには、他に何をする必要がありますか?

Tools-> Options-> Debugging-> General-> Enableコードのみ」を無効にしました。 DLLは、「ランタイムトラッキングと最適化の無効化(/ ASSEMBLYDEBUG)」でコンパイルされ、デバッグ情報を「はい(/ DEBUG)」に生成します。

32
QueueHammer

C++ DLLにデバッグするには、ソリューションのスタートアップアプリケーションで混合モードデバッグを有効にする必要があります。

  • プロジェクトを右クリック->プロパティ
  • [デバッグ]タブに移動します
  • 「アンマネージコードのデバッグを有効にする」にチェックを入れます

これにより、F5スタイルのシナリオのネイティブコードにデバッグできます。プロセスにアタッチできるようにする場合は、[プロセスにアタッチ]ダイアログで次の手順を実行します。

  • デバッグするプロセスを選択します
  • プロセスリストの上にある[選択...]ボタンをクリックします
  • [これらのコードタイプをデバッグする]をクリックします
  • マネージドとネイティブの両方を確認してください
58
JaredPar

アンマネージド(ネイティブ)デバッグを有効にする必要があります。

開始後にプロセスにアタッチする場合:

[ツール]メニューに移動し、プロセスにアタッチして、ネイティブデバッグが有効になっていることを確認します。

読み取り専用の編集ボックスが表示されます。

添付先:マネージコード、ネイティブコード[選択]

ネイティブコードがそこにリストされていることを確認してください。そうでない場合は追加してください。

ビジュアルスタジオ内からプロジェクトを開始する場合:

デバッグモードで開始しているプロジェクトプロパティ。プロジェクトのプロパティに移動し、[デバッグ]タブを選択します。

このチェックボックスがオンになっていることを確認してください。

アンマネージコードのデバッグを有効にする

4
Brian R. Bondy

デバッグするプロセスにアタッチするときは、アタッチする方法を指定する必要があります。いくつかのオプション、つまりマネージドとネイティブがあります。アンマネージC++でC#コードをデバッグするには、プロセスにマネージおよびネイティブとしてアタッチする必要があります(両方を同時に選択できます)。

1
Joseph

同じ問題に直面し、受け入れられた回答で提案されたすべてのことを実行しましたが、アンマネージドDLLのブレークポイントはヒットしませんでした!

ただし、次のことを行うと、最終的にDLLをデバッグできました。

ソリューションエクスプローラーでソリューションを選択します
Menu >> Tools >> options >> Debugging >> Generalから選択
チェックを外すソースファイルが元のバージョンと完全に一致する必要があります "

0
Martin