开发团队中,随着版本的增多,用户的增多,修改遗留问题变得异常困难,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\68EB3547BCC044CB9FDE4CD4
B6AA983B1\DLXMLKitU.pdb。当然,会为每一个找到的pdb文件都拷贝一次,如果相同的pdb文件已经存在,则会覆盖服务器上之前的文件。(每个pdb会增加一个影响) -
会在服务器的管理目录下(形如\\symserver\symbols\000Admin)生成一个新的ID文件,比如“0000000002”,无扩展名。该文件记录此次之行add操作增加的所有pdb文件,每行一个pdb记录,指明这个pdb文件的本地源和服务器目标位置,形如: “DLXMLKitU.pdb\68EB3547BCC044CB9FDE4CD4
B6AA983B1″,”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\8A4D71F4E9964FE5A3600042 7E10112B1″,”D:\Develop\DLSolution\PDB\DLXMLKitU.pdb”,删除文件:\\symserver\symbols\DLXMLKitU.pdb\8A4D71F4E9964FE5A3600042 7E10112B1\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模式的符号服务器,在世界各地调试你的代码,学习微软牛大了。
发表评论
要发表评论,您必须先登录。