62

Visual Studio 2012 には、実行可能ファイルとクラス ライブラリ プロジェクトで構成される大規模なソリューションがあります。アプリケーションをデバッグするときに、特定のクラス ライブラリ プロジェクトのブレークポイントがヒットしません。

そのプロジェクトのシンボルのステータスを確認するために[Debug] > [Windows] > [Modules ] ウィンドウを調べたところ、 「Cannot find or open the PDB file」と表示されています
また、 「ユーザー コード」列の下に「いいえ」と表示されます。 ソリューションには、その列に「いいえ」と表示されているカスタム プロジェクトが他にもいくつかあり、それらのシンボルも読み込みに失敗していることに気付きました。「ユーザーコード」の下に「はい」が付いているものは、pdbが問題なくロードされているようです。しかし、これが関連しているかどうかはわかりません。

dll でdumpbin /headersを使用しましたが、pdb ファイルのパスが存在し、正しいです。

モジュールは、シンボル読み込みの除外リストに含まれていません。

また、モジュール ウィンドウのエントリを右クリックし、[シンボルの読み込み] を選択して、dll ヘッダーで指定されたパスに移動しようとしました。pdb を選択すると、「一致するシンボル ファイルがこのフォルダーに見つかりませんでした」と表示されます

これらのフォルダーとファイルを削除し、ソリューションをクリーンアップし、閉じて、全体を再構築した後にこれを取得します。pdb は、問題の dll と同時にビルドされたことは間違いありません。

したがって、明らかに問題は、エラー メッセージの「pdb を開けません」という部分です。

2台のコンピューターでこれを試しましたが、どちらも同じ動作を示しています。

ここからどこへ行くべきかについて誰か提案を提供できますか?おそらく、dllに対応するビルドされたpdbがロードされないのはなぜですか?

4

19 に答える 19

44

pdb と dll が実際に一致するかどうかを確認するためにいくつかのツールを試してみました。chkmatchを使用すると、実行中の dll の GUID と obj フォルダーの pdb が一致しないことがわかりました。

したがって、プロジェクトの obj フォルダー内の dll と pdb は一致しますが、ビルド後のイベントによってアプリケーションの宛先フォルダーに実際にコピーされた dll は、前のビルドの古い dll であることがわかります。

ビルド後のイベントは、その特定のプロジェクトがビルドされる前、または少なくともビルドが完了する前に実行され、ビンから既存の dll をコピーしていましたが、その後、継続中のビルドによって上書きされました。

ソリューションのプロジェクトの依存関係を編集し、ビルド後のイベントを含むプロジェクトがロードされていないプロジェクトに依存していることを確認することで問題を解決し、デバッグ中に pdb がロードされるようになりました。

于 2013-08-08T12:42:42.710 に答える
35

スタートアップ プロジェクト フォルダーから bin フォルダーと obj フォルダーを削除し、ソリューションを再構築しました。

于 2014-12-12T13:31:58.503 に答える
9

メッセージを受け取っていたプロジェクトは、ビルド時に最適化されていることがわかりました。

プロジェクトのプロパティ、[コンパイル] タブ、[高度なコンパイル オプション] に移動し、チェックボックスのEnable Optimizationsチェックを外しました

[最適化を有効にする] の選択を解除します

于 2016-07-14T14:55:57.150 に答える
4

リマインダー: プロジェクトを「デバッグ」構成にします...忘れてばかげている私のような人のために。

于 2016-05-03T14:38:22.857 に答える
3

私はちょうどこの問題を抱えていて、将来的に他の人(おそらく自分自身でさえも?!)を助けるので、ここに私の修正を入れると思いました...

リモートサーバー上のプロセスにアタッチするときは、「アタッチ先」がに設定されていることを確認してください

デバッグするコードのタイプを自動的に決定する

これを行うには、サーバー修飾子が提供され、プロセスのリストが表示されたら、[接続先] 入力の横にある [選択] ボタンをクリックします。

画像1 次に、「デバッグするコードの種類を自動的に決定する」を選択し、画面から [OK] を選択して、アタッチします。

画像2
少なくとも、これで問題は解決しました。

于 2016-09-09T13:07:30.050 に答える
2

ここでのパーティーには少し遅れました-念のため、これが役に立ちます.

いくつかの個別の Web サイトがあります (Visual Studio の異なるソリューションにあります)。サイトの 1 つの初期読み込み時に、画像を返す他のサイトを呼び出していました。

これらのサイトはどちらも共通の DLL を参照していましたが、一方のサイトで作業している間、もう一方のサイトが「リリース」ビルドのままになっていることに気付きませんでした。

モジュールのデバッグ ウィンドウ (非常に役立つ) について言及し、ビルド後のイベントで正しい軌道に乗せてくれた Nanhydrin に感謝します。

于 2015-09-24T14:35:21.283 に答える