我正在尝试更多地使用windbg,并且我一直遇到符号缓存问题。我不清楚字符串的格式应该是什么。
我有一些要求:
我们在\\ foo \ Build1234的分布式版本中的符号存档未组织为符号服务器。如果我理解正确,我需要使用缓存关键字。
鉴于这些要求,这看起来像是格式正确的srvpath:
cache*\\foo\Build1234;srv*c:\dev\symbols*http://msdl.microsoft.com/download/symbols
修改
我刚刚开始阅读高级Windows调试,我误解了缓存关键字的工作原理。我认为这是告诉调试器该文件夹只是文件夹而不是符号服务器的一种方式。迈克尔离开他的评论后,我重读了这一部分,看到它确实像迈克尔描述的那样有效。
现在我很困惑你何时使用;或* *分隔路径/ 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用作缓存*指令右侧任何其他路径的缓存。
偶尔使用srv *会让我感到困惑 - 我不明白为什么第一个和最后一个路径都没有以srv *作为前缀。
编辑2:
这慢慢开始对我有意义。 srv指令用于符号服务器,而不用于普通符号目录。所以,我相信我原来问题的答案是:
\\foo\Build1234;cache*c:\dev\symbols;srv*http://msdl.microsoft.com/download/symbols
答案 0 :(得分:37)
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
然后会抑制符号提示。
答案 1 :(得分:2)
这是关于加载符号的调试问题的详细文章。