开发团队中,随着版本的增多,用户的增多,修改遗留问题变得异常困难,pdb是个好东西,符号服务器更是个好东西。给自己的开发团队建立一个简单的符号服务器会损失不好,俗话说得好嘛,“磨刀不误砍柴工”。
基本需求
硬件一台,要求很简单:有操作系统,硬盘足够足够足够大(请注意用了三个足够)
工具软件:symstore.exe(Debugging Tools for Windows中带有)
工程的属性中设置了输出调试信息,也就是会产生pdb文件
添加符号版本
命令行格式
symstore add /r /f "PDB file path" /s "Symbol server path" /t "Product Name" /v "Product Version" /c "Comment"
命令行举例
symstore add /r /f D:\Develop\DLSolution\PDB\*.pdb /s \\symserver\symbols /t "DylanToolkits" /v "5.1.34.090710" /c ""
参数简单说明
symstore add 代表执行添加一组symbol到符号服务器的命令
/r 递归搜索/f所指定的目录中的所有文件
/f 需要查找pdb文件的目录,按照标准文件名通配方式
/s 符号服务器目录
/t 产品名称,此名称会出现在history.txt中
/v 产品版本,可以通过该版本来建立同源码库的联系(调试的时候你总得看源代码吧,用这个版本号去检索你的源码库,找到合适的源码),此名称会出现在history.txt中
/c 注释,爱写啥写啥,此名称也是会出现在history.txt中
影响
会在服务器目录下的指定pdb目录下添加一个新目录,该目录按照一定的算法(算法自己另外去google)命名,然后在下边放置刚刚添加的pdb文件,比如,如果有一个DLXMLKitU.pdb文件被执行上述命令时发现,那么执行完成后,会将该文件拷贝到: \\symserver\symbols\DLXMLKitU.pdb\68EB3547BCC044CB9FDE4CD4B6AA983B1\DLXMLKitU.pdb。当然,会为每一个找到的pdb文件都拷贝一次,如果相同的pdb文件已经存在,则会覆盖服务器上之前的文件。(每个pdb会增加一个影响)
会在服务器的管理目录下(形如 \\symserver\symbols\000Admin)生成一个新的ID文件,比如“0000000002”,无扩展名。该文件记录此次之行add操作增加的所有pdb文件,每行一个pdb记录,指明这个pdb文件的本地源和服务器目标位置,形如:
"DLXMLKitU.pdb\68EB3547BCC044CB9FDE4CD4B6AA983B1","D:\Develop\DLSolution\PDB\DLXMLKitU.pdb"
会修改历史记录文件( \\symserver\symbols\000Admin\History.txt),该文件每行代表一次add或者del操作,如执行上述命令行,产生的历史记录行信息形如:
0000000002,add,file,07/10/2009,14:28:09,"DylanToolkits","5.1.34.090710","", 分别记录执行此次操作影响的ID号,操作类型,日期时间,产品名称,版本号,备注信息;
会影响其他位于000Admin目录下的文件,可以不关心。
删除符号版本
命令行格式:
symstore del /i "Operate ID number" /s "Symbol server path"
命令行举例:
symstore del /i 0000000001 /s \\symserver\symbols
参数简单说明
symstore del 代表执行删除一批pdb文件的操作
/i 需要删除的pdb文件,执行添加这批文件是产生的ID号,位于Admin目录中
/s 符号服务器目录
影响
会将服务器的管理目录下(形如 \\symserver\symbols\000Admin)的指定ID号的文件改名,在名字后边加后缀
.deleted,形如,0000000001.deleted;
根据ID号文件中的每一行,删除符号服务器目录下的指定文件,比如,会根据0000000001中的某一行
"DLXMLKitU.pdb\8A4D71F4E9964FE5A36000427E10112B1","D:\Develop\DLSolution\PDB\DLXMLKitU.pdb",删除文件: \\symserver\symbols\DLXMLKitU.pdb\8A4D71F4E9964FE5A36000427E10112B1\DLXMLKitU.pdb;
修改历史记录文件( \\symserver\symbols\000Admin\History.txt),增加一行记录,形如:
0000000003,del,0000000001;
会影响其他位于000Admin目录下的文件,可以不关心。
使用符号服务器调试
使用Windbg作为调试工具,即Debugging Tools for Windows;
设置系统环境变量
_NT_SYMBOL_PATH,指向调试服务器,如: \\symserver\symbols;
使用Windbg打开可执行文件,使用ld加载指定dll或者exe,使用lm查看符号文件表;
通过dll或者exe使用的符号库的路径,利用ID文件和History文件找到对应的源码版本号(当然也可以使用dll或者exe直接查找源码版本号);
从代码管理器下载对应版本号的代码,进行调试。
其他参考
符号服务器占用的磁盘空间会非常非常大,请注意硬盘配置;
可以使用Windows DFS技术来扩充磁盘空间;
参考symhttp.doc(Debugging Tools for Windows中带有);
可以利用IIS来建立Http模式的符号服务器,在世界各地调试你的代码,学习微软牛大了。
原文地址: http://zhouruijun163.blog.163.com/blog/static/10771562011102910538550/