5

Visual Studio 2010 を使用して、大部分が C で記述されたアプリケーションをデバッグしています。通常は、デバッガーを問題なくアタッチできますが、C++ / CLI で記述されたライブラリにリンクすると、いくつかの問題が発生します。

フラグを指定してライブラリをコンパイルすると/clr(最終的には、まだ作成されていないライブラリとしてこれを実行する必要があります)、ライブラリ呼び出しとは関係のない部分も含めて、C アプリケーション全体をデバッグするすべての機能が失われます。赤いブレーク ポイントの円があるはずの場所に、黄色の三角形と感嘆符が付いた空の円が表示されます。その上にカーソルを置くと、「ブレークポイントは現在ヒットしません。この行に関連付けられている実行可能コードはありません。考えられる原因には、条件付きコンパイルまたはコンパイラの最適化が含まれます。」というツール ヒントのみが表示されます。

次に、フラグなしでコンパイルされたまったく同じライブラリにリンクすると/clr、アプリケーションを再びデバッグできます。

C++ / CLI で記述されたライブラリを Visual Studio でデバッグできない可能性が高いことは理解していますが、それで問題ありません。アプリケーションの残りの部分をデバッグする機能を維持し、少なくとも外部ライブラリへの呼び出しの結果を確認したいだけです。

もう 1 つの複雑な要因は、このプロジェクトがビジュアル スタジオによってビルドされていないことです。を使用する外部の make システムを使用しclてコンパイルされるため、コンパイラに発行する必要があるコマンドをそのようにカスタマイズできます。

現在、ライブラリを思い通りにデバッグできない理由を知っている人はいますか? どうすればよいかアドバイスはありますか?

4

2 に答える 2

11

アタッチ時にデバッガの種類を選択する必要があります。ダイアログの「Attach to」ラベルに注意してください。[選択] ボタンを押して [ネイティブ] にチェックマークを付けると、ネイティブ コードのデバッグのサポートが得られます。ブレークポイントがヒットする前に、DLL をロードする必要もあります。それが行われたかどうかわからない場合は、[デバッグ] > [ウィンドウ] > [モジュール] デバッガー ウィンドウを見て、読み込まれた DLL を確認してください。デバッガーが DLL の読み込みを確認し、ブレークポイントを設定するとすぐに、ブレークポイント インジケーターが中空から赤一色に変わります。

それ以外の場合、C++/CLI のデバッグはサポートされています。[Managed] チェックボックスと [Native] チェックボックスの両方にチェックを入れることができます。また、いずれかの種類のコードにブレークポイントを設定します。サポートされていない唯一のことは、マネージド コードからネイティブ コードへのシングル ステップとその逆です。コードがブレークポイントにヒットする必要がある正しいデバッグ エンジンをアクティブにするには、モード スイッチが必要です。

また、ネイティブ プロジェクトのデバッグ オプションを検討してください。開始する EXE を指定できます。F5 を押すだけでデバッグを開始し、接続の手間を省くことができます。

于 2012-04-18T20:06:21.273 に答える
3

Debugger Typeと関係があるかもしれません! (ただし、それは私が十分に知らない特定の建物の構成に依存します)

プロジェクトのいずれかが共通言語ランタイム サポート (/clr) に準拠している場合は、スタートアップ プロジェクトのデバッガーの種類を「混合」に設定する必要があります。これは、デフォルト設定の「自動」が失敗する可能性があるためです。

次の 2 つのプロジェクトがあるとします。

1) CLR 以外の C++ プロジェクト。.exe ファイルを生成するスタートアップ プロジェクトです。

2) mylibrary.dll を生成する C++ プロジェクト。マネージ コードを使用するため、共通言語ランタイム サポートを使用してコンパイルされます。最初のプロジェクトの .exe は mylibrary.dll を呼び出します。

Debugger Type をデフォルト値の「Auto」に設定して最初のプロジェクトを開始すると、最初のプロジェクトをデバッグできますが、2 番目のプロジェクトをデバッグすることはできません。デバッガー セレクターは、CLR ライブラリを呼び出すことを認識しません。

そのため、プロジェクト プロパティ -> 構成プロパティ -> デバッグ -> デバッガの種類を「混合」に設定してください。

于 2012-11-22T15:21:38.990 に答える