4
  • ステップ 1: myProgram.exe をビルドし、myProgram.pdb を生成します。
  • ステップ 2: myProgram.exe で意図的にクラッシュを引き起こします。
  • ステップ 3: Visual Studio をデバッガーとして使用するかどうか尋ねられたので、使用しました。
  • ステップ 4: Visual Studio が myProgram.pdb からシンボルを読み込みます。
  • ステップ 5: コール スタックをチェックして、クラッシュが発生した (既知の) 場所を特定します。
  • ステップ 6: 眉をひそめたり、当惑したりすることはありません。

ただし、myProgram.exe と myProgram.pdb の名前を SomethingElse.exe と SomethingElse.pdb に変更してこれらの手順を繰り返すと、手順 4 以降は結果が混在します。私の知る限り、私のビルド マシンでは、VS は名前が変更された PDB ファイルからシンボルを常に正常にロードします。ただし、私のリモート ターゲット マシンでは、VS はシンボルをロードしません。PDB ファイルが実行可能ファイルと一致しないことが常に通知されます。なぜだめですか?私が違反しているあいまいなルールはありますか? 問題が発生した場合に備えて、どこでも Visual Studio 2005 を実行しています。

4

2 に答える 2

3

ここで破られている単純な微妙なルールは、PDB ファイル名が EXE ファイル名から派生したものではなく、EXE ファイルにエンコードされているように見えることです。したがって、たとえば、Windows エクスプローラーで単純なコピー アンド ペーストによって「myProgram.exe のコピー」と「myProgram.pdb のコピー」を作成すると、名前が変更されているにもかかわらず、シンボルが読み込まれているように見えることがあります。ただし、これは元の「myProgram.pdb」ファイルも存在する場合にのみ機能します。「myProgram.pdb」を削除して「myProgram.pdb のコピー」しかない場合、シンボルには互換性があるかもしれませんが、Visual Studio には互換性がありません。それらをロードしようとしても。

私のオフィスのリモート マシンでの簡単なテストでは、変更されたのはファイル バージョンではなくファイル名だけでしたが、実際のリモート マシンでは名前とファイル バージョンの両方が異なっていたため、動作しているように見えるもの。

于 2013-01-24T23:05:20.413 に答える