【问题标题】:WinDbg can't find microsoft symbolsWinDbg 找不到微软符号
【发布时间】:2016-06-27 19:56:18
【问题描述】:

我有一个简单的演示控制台程序可以调试,但令人惊讶的是,windbg 无法从 Microsoft 默认存储中获取符号。

我愿意

.reload /f

我得到了总结:

************* Symbol Loading Error Summary ************** 
Module name            Error 
ConsoleApp             PDB not found : cache*
                Unable to locate the .pdb file in this location

                The system cannot find the file specified : SRV*https://msdl.microsoft.com/download/symbols
                The SYMSRV client failed to find a file in the UNC store, or there
                is an invalid UNC store (an invalid path or the pingme.txt file is
                not present in the root directory), or the file is present in the
                symbol server exclusion list.

符号文件路径是

srv*

我试图使用我自己的应用程序的 pdf 文件,但它甚至找不到微软符号。

更新

整理其他问题后,我可以将其重现。好像我只是读错了消息。由于错误消息指向微软默认商店,我读它就像它没有在微软商店找到指定的文件......认为它没有连接/查找/下载微软符号,而实际上主要错误说它只是没有'找不到我自己的应用程序的符号。

不过,消息不是很清楚。例如,当我设置并添加一个额外的路径时,Ok 说。

0:000> .sympath srv*c:\test\Symbols*https://msdl.microsoft.com/download/symbols;c:\test\hello
DBGHELP: Symbol Search Path: srv*c:\test\symbols*https://msdl.microsoft.com/download/symbols;c:\test\hello
DBGHELP: Symbol Search Path: srv*c:\test\symbols*https://msdl.microsoft.com/download/symbols;c:\test\hello
Symbol search path is: srv*c:\test\Symbols*https://msdl.microsoft.com/download/symbols;c:\test\hello
Expanded Symbol search path is: srv*c:\test\symbols*https://msdl.microsoft.com/download/symbols;c:\test\hello

************* Symbol Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*c:\test\Symbols*https://msdl.microsoft.com/download/symbols
OK                                             c:\test\hello

现在当我.reload /f 符号加载错误摘要是这样的:

************* Symbol Loading Error Summary **************
Module name            Error
App                    The system cannot find the file specified : srv*c:\test\symbols*https://msdl.microsoft.com/download/symbols
                The SYMSRV client failed to find a file in the UNC store, or there
                is an invalid UNC store (an invalid path or the pingme.txt file is
                not present in the root directory), or the file is present in the
                symbol server exclusion list.

                       PDB not found : c:\test\hello\symbols\exe\App.pdb
                Unable to locate the .pdb file in this location

不知道为什么无法在路径PDB not found : c:\test\hello\symbols\exe\App.pdb加载?

【问题讨论】:

  • 这是正确的语法:SRV*C:\symbols*https://msdl.microsoft.com/download/symbols
  • 我不再收到此错误,可能是在我退出并重新启动 windbg 之后
  • PDB 在哪里?你把它放在 c:\test\hello, c:\test\hello\symbols 还是在哪里?同样重要的是:你是怎么把它放在那里的?复制/粘贴还是使用 symstore?
  • @ThomasWeller 我并没有真正将 pdb 文件放在那里,我只是想看看它在那里搜索但没有找到它的消息。

标签: windbg


【解决方案1】:

在你的 WinDbg 会话的输出中有

************* Symbol Loading Error Summary ************** 
Module name            Error 
ConsoleApp             PDB not found : cache*

所以ConsoleApp 存在模块加载错误,这是您的 应用程序,而不是 Microsoft 应用程序。

当然,您还没有将应用程序的符号上传到 Microsoft,所以在 https://msdl.microsoft.com/download/symbols 上找不到这些符号。

在我看来你的应用是

  • 完全没有符号信息的发布版本
  • 带有符号信息的调试版本,但在应用程序中指定的路径中找不到符号

因此,

  • 除了微软符号服务器(请使用.symfix c:\path\to\microsoft-symbols),
  • 确保您已经为您的应用程序构建了 PDB(检查您的编译器和/或链接器设置,具体取决于编程语言)
  • 将您自己的符号添加到符号路径 (.sympath+ c:\path\to\pdb\)。
  • .reload 符号

语法srv*is documented,但实际上我从未见过有人在实践中使用它,因为人们希望从本地存储的符号中受益,从而提高性能。

如果仍然无法正常工作,请使用!sym noisy Process Monitor 解决符号加载问题。 .pdb 的文件名过滤器应该会有所帮助。

原因是

  • 即使使用 !sym noisy,WinDbg 也不会列出它实际查找符号的所有路径
  • 符号加载顺序的文档不正确。

    帮助文件说符号是按这个顺序加载的

    • X:\...\symbols\<ext>\<filename>.pdb
    • X:\...\<ext>\<filename>.pdb
    • X:\...\<filename>.pdb

    但是我观察到的加载顺序是

    • X:\...\<filename>.pdb
    • X:\...\<ext>\<filename>.pdb
    • X:\...\symbols\<ext>\<filename>.pdb

【讨论】:

  • 我可以在修复其他问题后重现它,听起来好像我读错了..已经更新了帖子。
【解决方案2】:

srv* 是什么意思是你所拥有的一切吗?
路在哪里?
比如说 c:\symbols 或 f:\mycrap\myuselesssymbols 等?

路径应该类似于 srv*viz X:\yyyyyy*http://msdl.microsoft.com/download/symbols

您可以在 .reload /f

之前使用 .symfix 设置默认符号路径

【讨论】:

  • 这是它为你设置的路径 .symfix
  • “如果您在符号路径中包含字符串 srv*,调试器将使用符号服务器从默认符号存储中获取符号”来自 here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多