0

WinDbgを使用してマネージ コード (C#、Any CPU用に構築されたコンソール アプリケーション) からクラッシュ ダンプを読み込んでいます。クラッシュ ダンプは x64 プラットフォームで作成されます。x64 プラットフォームでデバッグしています。関連するPDBファイルをシンボル パスに配置しました。

しかし、WinDbg は常に奇妙なフォルダーからシンボルを見つけます。例を次に示します (!sym ノイジーを使用した場合):

SYMSRV:  c:\MySymbols\FooService.pdb\4311207E2E2D442CB7473828D2488F941\FooService.pdb not found

アプリケーションが呼び出されFooService.exe、関連する PDB ファイルの名前がFooService.pdb. C:\MySymbolsシンボル パスとして設定しFooService.pdb、ディレクトリにコピーしましたC:\MySymbols。しかし、なぜ WinDbg はFooService.pdbではC:\MySymbolsなく、奇妙なサブフォルダー "FooService.pdb\4311207E2E2D442CB7473828D2488F941" から検出されるのでしょうか?

私のシナリオでは、PDB シンボル ファイルをロードするために、最善の解決策は何ですか (自分でサブフォルダーFooService.pdb\4311207E2E2D442CB7473828D2488F941を手動で作成する必要がありますか)?

4

1 に答える 1

1

パスの奇妙な部分は、シンボル キャッシュ内の PDB のバージョン管理に使用されていると思います。キャッシュは、同じアプリケーションの異なるバージョンを含む多くのアプリケーションで使用できるため、シンボル ダウンローダーはそれらを分離するために何かを行う必要があります。

コマンドを使用して、シンボル ローダーがキャッシュされたコピーを無視するように強制できます.reload /fo。オプションと組み合わせると、.sympathロードを設定できるはずです。ローカル パスをシンボル パスに追加する簡単な方法は、.sympath+ <PATH>. その後、.reload /fo以前にキャッシュされた PDB を無視するために a を実行します。

編集:最初にあなたの質問を読み違えたと思うので、答えを少し静かに変更しました。このアップデートがより役立つことを願っています。

于 2009-10-12T05:57:28.483 に答える