web-dev-qa-db-ja.com

Visual Studio 2012でカスタムプロジェクトをデバッグするためのシンボルファイルがロードされない

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

Debug> Windows> Modulesウィンドウを見て、そのプロジェクトのシンボルのステータスを確認しましたが、"PDBファイルが見つからないか、開くことができません"と表示されます。
また、"No""User Code"列の下にあります。
ソリューションには、その列に「いいえ」と表示されているカスタムプロジェクトが他にもいくつかあり、それらのシンボルもロードできません。 「ユーザーコード」の下に「はい」と表示されているものはすべて、pdbが問題なくロードされていたようです。しかし、これが関連するかどうかはわかりません。

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

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

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

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

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

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

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

53
Nanhydrin

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

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

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

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

39
Nanhydrin

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

32
MacGyver

私にとっては、プロジェクトをIISから削除し、再度作成しただけで正常に動作します

10
Mohamed Badr

私にとっては、chkmatchツールを使用してから、Visual Studioを閉じて開き、クリーンにして再構築するだけでした。これで、私のpdbもロードされます。 Nanhydrinが指摘したように、[デバッグ]-> [Windows]-> [モジュール]から確認できます。このビューはデバッグ中にのみアクセスできます。

9
Pompair

私の場合、参照されたdllの古いバージョンは私のGACにありました。それをクリアし、それは働いた。

7
justcoding121

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

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

Deselect Enable Optimizations

6
chris31389

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

3
SimpsOff

ソリューションからプロジェクトを削除し、ソリューションに再度追加してくれました。 :)

2

私の場合、Enable Just My CodeTools>>Options>>Debugging>>Generalにチェックマークがありました。

私はそれのチェックを外し、それは働いた。

画像の例

2

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

(Visual Studioの異なるソリューションで)いくつかの個別のWebサイトがあります。いずれかのサイトの初期ロード時に、画像を返す他のサイトへの呼び出しを行っていました。

これらのサイトは両方とも共通のDLLを参照していましたが、1つのサイトで作業している間、他のサイトが「リリース」ビルドに残されていることに気付きませんでした-サイトのロード後に、問題のDLLが再構築されましたが、シンボル。

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

2
Paddy

私のために働いた別のスレッドからの回答: https://stackoverflow.com/a/28476665/5969306
-Visual Studioの場合:[プロジェクトプロパティ]-> [ビルド]-> [詳細設定]ボタン-> [デバッグ情報]ドロップダウンで、値が「なし」でないことを確認します。

1
Boyan P

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

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

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

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

Image 1 次に、「デバッグするコードのタイプを自動的に決定する」を選択し、画面から「OK」をクリックして、添付します。

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

1
dalemac

デバッグウィンドウに次のような行がありました。

モジュール「MyModule.dll」のシンボルはロードされませんでした。

[プロジェクトプロパティ]-> [ビルド]の[コードの最適化]オプションを削除しました。そして、エラーは消えました。

0
Rahbek

私はこの問題を抱えて、他のすべての解決策を試しました(2日間かかりました!!泣いています...!2日間!).

コマンドプロンプトで、次のコマンドを入力します。

gacutil –u <Assembly name>

方法:グローバルアセンブリキャッシュからアセンブリを削除する

0
Mitra M

この問題は、プロジェクトでdllの誤った参照が使用されていることが原因である可能性があります。

objおよびbin現在のプロジェクトのフォルダーとbuildプロジェクトを再度削除します。

0
Hassan Nazeer
  1. この回答のオプションを確認してください: https://stackoverflow.com/a/38377530/6911991
  2. 詳細設定をクリックし、デバッグ情報がFULLに設定されていることを確認します
    Advanced tab screenshot
  3. ソリューション内のすべてのプロジェクトでRun Configurationを確認します
0
Aleh Baslak

ASP.NET Temporaryフォルダーへのアクセス許可を確認します。

"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files"

アプリケーションプールのユーザーには、次のようなASP.NETファイルのサブフォルダーに対する権限が必要です。

root\60039743\c28e12ee
0
Inerren