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.pdbC:\MySymbols而是从一个奇怪的子文件夹“FooService.pdb\4311207E2E2D442CB7473828D2488F941”中找到?

在我的场景中,为了加载 PDB 符号文件,最好的解决方案是什么(我必须FooService.pdb\4311207E2E2D442CB7473828D2488F941自己手动创建子文件夹)?

4

1 回答 1

1

我相信路径的奇怪部分用于对符号缓存中的 PDB 进行版本控制。由于缓存可用于许多应用程序,包括同一应用程序的不同版本,符号下载器需要做一些事情来将它们分开。

您可以使用该.reload /fo命令强制符号加载器忽略任何缓存的副本。结合该.sympath选项,您应该能够设置加载。将本地路径添加到符号路径的一种简单方法是.sympath+ <PATH>. 之后,.reload /fo忽略任何以前缓存的 PDB。

编辑:我改变了我的回答,因为我相信我最初误读了你的问题。我希望这个更新更有用。

于 2009-10-12T05:57:28.483 回答