_NT_SYMBOL_PATH 格式

Posted

技术标签:

【中文标题】_NT_SYMBOL_PATH 格式【英文标题】:_NT_SYMBOL_PATH format 【发布时间】:2010-11-01 07:25:27 【问题描述】:

我正在尝试更多地使用windbg,但我一直遇到符号缓存问题。我不清楚字符串的格式应该是什么。

我有几个要求:

使用微软的服务器http://msdl.microsoft.com/download/symbols 使用我们软件中存档在 \\foo\Build1234 中的符号 在 c:\dev\symbols 使用本地缓存

我们在 \\foo\Build1234 的分布式构建中的符号存档未组织为符号服务器。如果我理解正确的话,我需要使用缓存关键字。

鉴于这些要求,这是否看起来像一个格式正确的 srvpath:

cache*\\foo\Build1234;srv*c:\dev\symbols*http://msdl.microsoft.com/download/symbols

编辑:

我刚开始阅读 Advanced Windows Debugging,但我误解了 cache 关键字的工作原理。我认为这是告诉调试器该文件夹只是一个文件文件夹而不是符号服务器的一种方式。在 Michael 发表评论后,我重新阅读了该部分,发现它确实像 Michael 所描述的那样有效。

现在我对你何时使用 ; 感到困惑或 * 分隔路径/URL。当您需要 srv* 前缀时。在 windbg 的在线帮助中,他们给出了这个例子:

\\someshare\that\cachestar\ignores;srv*c:\mysymbols*http://msdl.microsoft.com/download/symbols;cache*c:\mysymbols;\\anothershare\that\gets\cached

来自 \\someshare 的符号不被缓存,来自 Microsoft 的符号被缓存在 c:\mysymbols 中,并且 c:\mysymbols 用作 cache* 指令右侧的任何其他路径的缓存。

偶尔使用 srv* 让我感到困惑——我不明白为什么第一个和最后一个路径没有以 srv* 为前缀。

编辑 2:

这对我来说慢慢开始变得有意义了。 srv 指令用于符号服务器,而不用于普通符号目录。所以,我相信我原来的问题的答案是这样的:

\\foo\Build1234;cache*c:\dev\symbols;srv*http://msdl.microsoft.com/download/symbols

【问题讨论】:

相关:How to set up symbols in WinDbg 【参考方案1】:
SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234

应该可以正常工作,如果 \\foo\build1234 只是平面 PDB。这里不需要缓存;您只需要将目录添加到您的符号路径。

cache 关键字指定要缓存符号文件的位置,对于从非索引共享(如 \\foo\build1234)在本地缓存符号很有用

cache*C:\dev\symbols;SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234

上述路径会将来自 MS 符号服务器的符号和您的符号共享存储到本地计算机的 C:\dev\symbols 中。

要使用 windbg 调试符号问题,请执行

!sym noisy
.reload <some exe or DLL in your session>

然后执行一些强制加载 PDB 的操作。您将看到 windbg 在哪里寻找文件,以及它是否拒绝 PDB 这样做的原因。

!sym quiet

然后将禁止符号提示。

【讨论】:

当遇到符号问题时,我总是在打开嘈杂的负载后使用“.reload -f -a”。 谢谢迈克尔。你的答案是正确的。不过,我实际上最终做的事情略有不同。我将 \\\foo\build1234 放在路径的开头,因此它永远不会被缓存,指定我想要用于所有内容的全局缓存,然后添加 Microsoft URL。这样,我在调试期间附加的任何其他路径都将使用我的全局缓存,这就是我希望它的行为方式。谢谢。【参考方案2】:

这是关于调试符号加载问题的详细帖子。

Loading symbols in Windbg

【讨论】:

以上是关于_NT_SYMBOL_PATH 格式的主要内容,如果未能解决你的问题,请参考以下文章

windbg双机调试

windbg符号表问题

xperf 拒绝加载任何符号

WinDbg

解决vs2005调试时出现未载入符号的问题

使用 windbg 分析 windows 的dmp文件