_NT_SYMBOL_PATH格式/它是递归的吗?

时间:2014-06-30 12:00:52

标签: windows debugging windbg debug-symbols

我真正的问题很简单:_NT_SYMBOL_PATH中的路径是否递归搜索(特别是windbg)?

但是既然是/没有问题没有那么有趣,_NT_SYMBOL_PATH的官方格式是什么?

2 个答案:

答案 0 :(得分:4)

出于不同目的,存在不同类型的符号路径。我还没有完全理解,但这是我目前的理解:

平面格式(1层)可能是最容易存储您自己的私人符号。只需将所有PDB放入其中。

请注意,文档(作为EdChum提供的参考,可能是WinDbg帮助文件)不正确,恕我直言,特别是关于加载顺序。如果有疑问,最好找!sym noisy找出实际的负载顺序。

在任何n层情况下,不会重复搜索符号路径。调试器将从DLL或EXE文件派生一种哈希,然后查找它。要将文件添加到n层符号路径,请使用WinDbg附带的symstore.exe。

2层符号路径看起来像

C:\symbols\<filename>.pdb\<hash>\<filename>.pdb

3层符号路径是

C:\symbols\<fi>\<filename>.pdb\<hash>\<filename>.pdb

其中fi是文件名字母的第一个字母。

1层,2层和3层符号路径类型由特殊空文件pingme.txtindex2.txtflat.txt000Admin文件夹设置。您可以使用convertstore.exe在各层之间进行转换。 Channel 9 Defrag tools #88 videoEpisode #89对这些文件有所了解,但我没有在一个地方找到完整的参考文献。

我在一个目录中混合使用不同类型的符号路径时遇到了问题,因此您可能需要花时间阅读它,然后才能搞清楚。

答案 1 :(得分:2)

不,搜索不是递归的。但是,访问目录下的某些特定路径,这不是详尽的遍历。

探测的实际路径取决于条目的类型。您可以将两种类型的实体放入_NT_SYMBOL_PATH:常规目录和符号存储。符号存储可以是网络共享或webdav共享,甚至是本地目录。

将符号加载选项设置为详细 - 命令为!sym noisy。这将显示探测到的所有路径,以及在找到多个符号副本的情况下的优先级。以下是一个本地目录和一个本地符号存储的示例。

0:000> .reload -f notepad.exe
DBGHELP: e:\temp\notepad.pdb - file not found
DBGHELP: e:\temp\exe\notepad.pdb - file not found
DBGHELP: e:\temp\symbols\exe\notepad.pdb - file not found
SYMSRV:  e:\mysyms\notepad.pdb\35E6B7011856420C844065A1599A0D682\notepad.pdb not found
SYMSRV:  e:\mysyms\notepad.pdb\35E6B7011856420C844065A1599A0D682\notepad.pdb not found
DBGHELP: c:\Windows\SysWOW64\notepad.pdb - file not found
DBGHELP: notepad.pdb - file not found
<...>
DBGHELP: notepad - no symbols loaded