_NT_SYMBOL_PATH格式/是否recursion?

那么我真正的问题是: _NT_SYMBOL_PATHpathsearchrecursion(特别是windbg)?

但是,如果是/没有问题没有那么有趣,那么_NT_SYMBOL_PATH的官方格式是_NT_SYMBOL_PATH

有不同类型的符号路径用于不同的目的。 我还没有完全弄清楚,但这是我目前的理解:

平面格式(1层)可能是最容易存储自己的私人符号。 把所有的PDB放在里面。

请注意,文档(作为EdChum给出的参考,可能是WinDbg帮助文件)是不正确的,恕我直言,尤其是加载顺序。 如果有疑问,找出真正的加载顺序,最好做一个!sym noisy

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

2层符号路径看起来像

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

三层符号路径是

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

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

1层,2层和3层符号路径类型由特殊的空文件pingme.txtindex2.txtflat.txt000Admin文件夹设置。 您可以使用convertstore.exe在层之间进行convertstore.exe 。 频道9碎片整理工具#88视频和第89集对这些文件作了一些说明,但是我没有在一个地方找到完整的参考。

我在一个目录中混合了不同类型的符号路径时遇到了问题,所以在你搞砸之前,你可能需要花些时间来阅读它。

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

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

将符号加载选项设置为verbose – 命令是!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