31

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

我有几个要求:

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

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

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

编辑:

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

现在我对你何时使用 a 感到困惑;或 * 分隔路径/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
4

2 回答 2

39
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

然后将抑制符号提示。

于 2009-06-08T21:28:50.050 回答
2

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

在 Windbg 中加载符号

于 2013-10-17T19:13:38.413 回答