【问题标题】:Symbol issue when debugging C# code调试 C# 代码时出现符号问题
【发布时间】:2009-10-12 05:52:12
【问题描述】:

我正在使用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在C:\MySymbols中找不到FooService.pdb,而是从一个奇怪的子文件夹“FooService.pdb\4311207E2E2D442CB7473828D2488F941”中找到?

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

【问题讨论】:

    标签: c# .net debugging windbg crash-dumps


    【解决方案1】:

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

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

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

    【讨论】:

    • “在本地重新创建应用程序路径并将 PDB 文件与程序集一起放置”——您能否更详细地描述在本地重新创建应用程序路径是什么意思?并且“将 PDB 文件与程序集一起放置”?在我的场景中,我需要创建什么样的目录?
    • 我做了一些研究,你的意思是在符号路径中添加一个本地符号文件夹吗?像这样的东西? f:\LocalSymbolPath;SRVC:\mysymbolsmsdl.microsoft.com/download/symbols
    • 我在这里有一个相关的问题,如果你能看一下,不胜感激。 stackoverflow.com/questions/1553041/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2019-05-13
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多