_NT_SYMBOL_PATH格式

cri*_*ell 30 windbg

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

我有一些要求:

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

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

cache*\\foo\Build1234;srv*c:\dev\symbols*http://msdl.microsoft.com/download/symbols
Run Code Online (Sandbox Code Playgroud)

编辑:

我刚刚开始阅读高级Windows调试,我误解了缓存关键字的工作原理.我认为这是告诉调试器该文件夹只是文件夹而不是符号服务器的一种方式.迈克尔离开他的评论后,我重读了这一部分,看到它确实像迈克尔描述的那样有效.

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

\\someshare\that\cachestar\ignores;srv*c:\mysymbols*http://msdl.microsoft.com/download/symbols;cache*c:\mysymbols;\\anothershare\that\gets\cached
Run Code Online (Sandbox Code Playgroud)

来自\\ someshare的符号未缓存,Microsoft的符号缓存在c:\ mysymbols中,而c:\ mysymbols用作缓存*指令右侧任何其他路径的缓存.

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

编辑2:

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

\\foo\Build1234;cache*c:\dev\symbols;srv*http://msdl.microsoft.com/download/symbols
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 38

SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234
Run Code Online (Sandbox Code Playgroud)

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

cache关键字指定您希望缓存符号文件的位置,并且对于从非索引共享本地缓存符号(如\\foo\build1234)非常有用

cache*C:\dev\symbols;SRV*C:\dev\symbols*http://msdl.microsoft.com/download/symbols;\\foo\build1234
Run Code Online (Sandbox Code Playgroud)

上述路径将MS符号服务器中的符号和符号共享存储在C:\ dev\symbols中的本地计算机上.

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

!sym noisy
.reload <some exe or DLL in your session>
Run Code Online (Sandbox Code Playgroud)

然后执行一些会强制加载PDB的操作.你会看到windbg在哪里寻找文件,如果它拒绝PDB为什么会这样做.

!sym quiet
Run Code Online (Sandbox Code Playgroud)

然后会抑制符号提示.