記号の問題C#のコードをデバッグするとき
-
20-09-2019 - |
質問
私は、マネージコード(C#のコンソールからクラッシュダンプをロードするために WinDbgのに使用していますアプリケーションは、のどれ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
を作成する必要があります)とは何ですか?
解決
私は、パスの奇妙な部分がシンボルキャッシュ内のPDBをバージョン管理するために使用されていると信じています。キャッシュは、シンボルのダウンローダは、それらを離れて保つために何かをする必要があり、同じアプリケーションの異なるバージョンを含む多くの用途に使用できるようにます。
あなたは.reload /fo
コマンドを使用して、任意のキャッシュされたコピーを無視するシンボルローダーを強制することができます。 .sympath
オプションと組み合わせることで、あなたは読み込みを設定することができるはずです。シンボルパスにローカルのパスを追加する簡単な方法は.sympath+ <PATH>
です。その後、以前にキャッシュされたのPDBを無視する.reload /fo
を行います。
編集:私は、私は私が最初にあなたの質問を読み違えると考えているように私の答えは少し静かに変更。私は、この更新がより有用であると思います。