7

C++/CLI で混合モード アセンブリを使用しています。すべてのマネージ モードでアセンブルされた pdb は、混合モード アセンブルで正常に読み込まれると読み込まれますが、ネイティブ dll と pdb は、モジュール ペイン (つまり、VS デバッグ -> Windows -> モジュール) にネイティブ pdb の情報が表示されていても読み込まれません。

私はネイティブ dll を使用しており、そのエクスポートされた関数を C++/CLI コードの混合アセンブリで呼び出しています。ここでは、関数が正常に呼び出されますが、ネイティブ pdb シンボルが読み込まれず、ネイティブ コードのすべてのブレークポイントが白抜きの円として表示され、ツール ヒントには、このために読み込まれたシンボルがないと表示されます。

私はすべてを行いました.pdbは現在のディレクトリに配置され、管理されたプロセスが起動されます。すべてのobjおよびdebugフォルダーを削除し、すべてのプロジェクトを同時に再コンパイルしました。Exe と対応する pdb のシンボルが一致することを示す ChkMatch ユーティリティも使用しました。

マネージド (C++/LCI 混合モード) コードからの呼び出し中にネイティブ コードのブレークポイントを有効にする方法はありますか?

よろしく、

ウスマン

4

1 に答える 1

17

混合モードのデバッグは、ヒットとミスの可能性があり、ほとんどがミスです。最初に、実際に混合モードのデバッグが有効になっていることを確認してください。C# プロジェクトからは、[プロジェクト + プロパティ]、[デバッグ]、[アンマネージ コードのデバッグを有効にする] チェック ボックスです。次に、混合モードのデバッグは 64 ビット プロセスでは有効になりません。64 ビット オペレーティング システムで実行している場合は、.exe を強制的に 32 ビット モードで実行してください。プロジェクト + プロパティ、ビルド タブ、プラットフォーム ターゲット = x86。

次に、デバッガーが .pdb ファイルを検索した場所を確認します。[デバッグ + Windows + モジュール] ウィンドウから、DLL を右クリックし、[シンボル ロード情報] を選択します。最後のあえぎは、アンマネージ コードで __debugbreak() を使用することです。


更新: VS の最近のバージョン (VS2012 以降) には、アンマネージド デバッグ エンジンとの互換性が不十分な新しいマネージド デバッグ エンジンがあります。[ツール] > [オプション] > [デバッグ] > [全般] で、[マネージド互換モードを使用する] にチェックを入れます。VS2010 で最後に使用されたレガシー デバッグ エンジンを有効にします。

于 2010-07-24T16:35:24.107 に答える