简单建立自己的符号服务器(转)

发布于:2021-10-28 09:31:06

开发团队中,随着版本的增多,用户的增多,修改遗留问题变得异常困难,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:DevelopDLSolutionPDB*.pdb /s?
\symserversymbols?/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文件被执行上述命令时发现,那么执行完成后,会将该文件拷贝到:
\symserversymbolsDLXMLKitU.pdb68EB3547BCC044CB9FDE4CD4B6AA983B1DLXMLKitU.pdb。当然,会为每一个找到的pdb文件都拷贝一次,如果相同的pdb文件已经存在,则会覆盖服务器上之前的文件。(每个pdb会增加一个影响)


会在服务器的管理目录下(形如
\symserversymbols00Admin)生成一个新的ID文件,比如“0000000002”,无扩展名。该文件记录此次之行add操作增加的所有pdb文件,每行一个pdb记录,指明这个pdb文件的本地源和服务器目标位置,形如:?
"DLXMLKitU.pdb68EB3547BCC044CB9FDE4CD4B6AA983B1","D:DevelopDLSolutionPDBDLXMLKitU.pdb"


会修改历史记录文件(
\symserversymbols00AdminHistory.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?
\symserversymbols


参数简单说明


symstore del 代表执行删除一批pdb文件的操作


/i 需要删除的pdb文件,执行添加这批文件是产生的ID号,位于Admin目录中


/s 符号服务器目录


影响


会将服务器的管理目录下(形如
\symserversymbols00Admin)的指定ID号的文件改名,在名字后边加后缀
.deleted,形如,0000000001.deleted;


?根据ID号文件中的每一行,删除符号服务器目录下的指定文件,比如,会根据0000000001中的某一行
"DLXMLKitU.pdb8A4D71F4E9964FE5A36000427E10112B1","D:DevelopDLSolutionPDBDLXMLKitU.pdb",删除文件:
\symserversymbolsDLXMLKitU.pdb8A4D71F4E9964FE5A36000427E10112B1DLXMLKitU.pdb;


修改历史记录文件(
\symserversymbols00AdminHistory.txt),增加一行记录,形如:
0000000003,del,0000000001;



会影响其他位于000Admin目录下的文件,可以不关心。?


使用符号服务器调试



使用Windbg作为调试工具,即Debugging Tools for Windows;


设置系统环境变量
_NT_SYMBOL_PATH,指向调试服务器,如:
\symserversymbols;


使用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/

相关推荐

最新更新

猜你喜欢