首页Visual Studio › 简单建立自己的符号服务器

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

开发团队中,随着版本的增多,用户的增多,修改遗留问题变得异常困难,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 代表执行删除一批pdb文件的操作
    • /i 需要删除的pdb文件,执行添加这批文件是产生的ID号,位于Admin目录中
    • /s 符号服务器目录
  • 影响

使用符号服务器调试

  • 使用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模式的符号服务器,在世界各地调试你的代码,学习微软牛大了。

发表评论