Windbg 从改变的位置加载符号

Windbg loads symbols from an altered location

使用符号 window(CTRL + S),我已将 WinDbg 设置为从特定位置加载我的符号。

现在,当我附加我的调试器并尝试查看堆栈时 window,似乎符号没有真正正确加载。

现在,当我使用 !sym noisy 命令和 .reload /f 时,我从调试器中得到以下信息:

那么,从第三张图来看,为什么还要定义SYMSRV呢?为什么要在文件末尾添加 GUID 前缀?

如果不是将 guid windbg 添加到路径中,它就会起作用。我做错了什么。

编辑:进一步查看日志后,我看到调试器试图从本地驱动器加载符号。

可以使用几种不同的格式来存储符号。这些是 0 层、2 层和 3 层。

0-tier 基本上是一个平面文件列表,如果您刚刚构建了程序并且所有 PDB 都位于一个文件夹中,那么它是合适的。如果您输入像 c:\path 这样的本地路径或像 \server 这样的服务器共享,WinDbg 应该考虑 0 层存储布局,但也可以尝试其他布局。

问题是您只能在 0 层存储中存储一个版本的 PDB,这就是存在 2 层和 3 层符号存储的原因。将符号添加到此类存储时,它会考虑 GUID,因此可以存储同一程序的多个版本。 2 层和 3 层符号存储应以 srv* 开头。 2 层和 3 层商店之间的确切区别在频道 9 episode 87 and it's possible to convert 2 层商店到 3 层商店中有解释。

不要将 srv* 符号路径语法与 SYMSRV: 调试输出混淆。恕我直言,SYMSRV: 只是 symsrv.dll 的调试消息,因此无需担心。

加载符号的真相只能通过Process Monitor来监控。并非记录 WinDbg 搜索符号的所有位置,即使在嘈杂模式下也是如此。

除符号路径外,DLL 还包含对 PDB 本地路径的引用,WinDbg 将考虑此路径,与符号路径设置无关。