我在Visual Studio选项中将符号缓存目录设置为D:\symbols
:
在这个目录中,Visual Studio创建了一个层次结构,顶层目录与PDB文件名匹配(例如ole32.pdb
),下一层是一个或多个目录,如D0C3BDDD4ADD4E87B2B5E803303B8D772
(看起来像33位十六进制数字),其中是PDB文件本身,可能是从Microsoft Symbol Server下载的。
我想这些十六进制数字代表PDB文件的版本。我想知道,这些数字是否有任何结构或意义,以及如何从PDB文件中提取它们(理想情况下,使用C#)?
给定其他文件夹中的PDB文件,是否可以在符号缓存中找到Visual Studio调试器将查找它的目录?
2条答案
按热度按时间3gtaxfhh1#
前32位数字只是一个GUID,它被烘焙到PE文件中(DLL,EXE,...)和相应的PDB,接下来的数字是所谓的 age,以十六进制表示,没有前导零(它可以在构建过程中通过链接、签名等来递增)。在大多数情况下,年龄适合单个十六进制数字,因此总共33位,有时称为 signature。您可以使用Debug Interface Access SDK从PDB文件中提取签名。C#中的示例:
b4lqfgs42#
此值是一个GUID,它嵌入在部件和符号文件中,以便可以同步它们。
http://www.wintellect.com/blogs/jrobbins/pdb-files-what-every-developer-must-know
您可以在程序集上运行
dumpbin /headers
以查看嵌入的GUID。