创建自己的PDB Server

新来组里半年,今天在发版验证的时候出现崩溃,在崩溃dump的时候寻找PDB,发现目前组里已经建立了一套自动获取PDB和dll/EXE等的符号服务器,具体来说就是可以像微软的符号服务器一样自动搜索加载。

在面对目前敏捷开发与CI流程自动比较普遍的环境下,如果搭建一套工程的符号服务器,那么无疑给我们定位问题方便许多。

废话说多了,那么具体怎么来做:

下载 Debugging Tools for Windows,使用symstore.exe帮助搭建

用法如下:

symstore.exe add /r /f source_dir_where_your_pdbs_are /s root_of_yor_symstore /t product_name /v version_id /compress

示例如下:

symstore add /r /p /f //BuildServer/DailyBuild/2.3.5beta/symbols/*.*
   /s //sampledir/symsrv /t "Windows 2000" /v "Build 235 x86 free"
   /c "Sample add"

稍微解释一下是如何关联PDB和DLL的,在使用Windbg进行调试的时候,首先会验证dump文件里面和DLL里面的Code View signature和age,然后PDB里面也有保存Signature,symstore这个工具就是在每个pdb目录下面根据signature和age建立目录。比如,ntdll.pdb目录下面会有很多子目录,子目录里面才对应各个版本的实际PDB。

可以参考:

https://msdn.microsoft.com/en-us/library/ms680693(v=vs.85).aspx

http://aegisknight.org/2009/03/reporting-crashes-in-imvu-creating-your-very-own-symbol-server/