当前位置: 首页 > news >正文

[转] 支持源文件索引符号服务器的构建和使用

当我们开发的Windows程序崩溃时,我们常会将Catch到的Dump文件进行分析。

以往当我们拿到一个Dump时,通常是这样做的:
1.确定Dump发生时的版本号;
2.找到备份的对应版本的PDB文件;
3.必要时再找对应版本的源文件;

然而,当发布出去的版本较多时,上述过程是很麻烦的;
建议一个符号服务器可以为我们省去上述麻烦。
----以下介绍带源文件索引的符号服务器的创建过程--------:
以下是创建符号服务器的过程,使用符号服务器不需要这些工作;
以下描述仅适用于源代码服务器为SubVersion的情形,其他源代码服务器的情况,请参考相应资料。

1. 准备工作
安装Windows Debugging Tools
下载地址:http://www.microsoft.com/whdc/devtools/downloads.mspx

安装Perl
下载地址:http://www.activestate.com/activeperl

安装SubVersion
下载地址:http://www.sliksvn.com/en/download

安装SubVersion要注意几点:
Ø  它可以与TortoiseSVN共存;
Ø  一定不能安装带本地化语言的版本,必须是英文版;如果安装上述推荐地址的SilkSVN,注意不要选择本地语言选项。为了确定是否安装了英文版,可以在命令行中敲svn help,看输出的是否全部为英文提示;这点尤为重要,而且容易被忽视;
将上述软件的安装路径加入到Path环境变量中;注意对于Debugging Tools for Windows,不仅需要把Debugging Tools for Windows目录加入到Path环境变量,还需要将其下面的srcsrv目录也加进去,因为后续执行的svnindex命令等实际上是在srcsrv目录中。

2. 为符号文件添加源文件索引
当编译完成后,将符号文件添加到符号服务器之前,需要对符号文件进行处理,在符号文件上加入我们的源文件服务器地址信息;如果没有这一步,那么源文件只能人工自己去找了。

执行如下命令行:
Svnindex /debug /symbols="E:\MySource\Symbols" /source=" E:\MySource\"
上述的"E:\MySource\Symbols"为符号文件所在路径;" E:\MySource\"为源文件所在路径
注意上述两个路径一定必须是全路径,不能是相对路径;这点与若干文献描述不一致,

但是我的实践证明,如果是相对路径,这个命令是不能执行成功的。
上述命令的执行结果如下图:
支持源文件索引符号服务器的构建和使用 

上述命令实际上是往符号文件中加入了svn命令,用于下载相应的源文件。
要看究竟发生了什么,可以采用srctool命令查看某PDB文件中的信息,如:
Srctool e:\MySource\Symbols\OneFile.pdb
执行结果类似下图:
支持源文件索引符号服务器的构建和使用 

看到了吧,文件中含svn.exe cat命令,从源文件服务器中将相应revision的文件下载下来。

3.       将符号文件添加到符号服务器
接下来就是把符号文件加入到符号服务器了。很简单,就是一条命令:
symstore.exe add /r /f "E:\AliWWAutoPackage\Trunk\SourceCode\setup\release*.pdb" /s "E:\SymbolServer" /t TaoyouSetup /v "1.0.0.1" /compress /d "E:\SymbolServer\SymStore_TaoyouSetup.log" /o

上述命令中,/f后的路径是符号文件路径;/s后的路径是符号服务器所在路径;其他命令参数请参考Symstore.exe的命令说明吧。
然后把符号服务器路径设置为文件共享,或者通过HTTP服务器暴露出去,那就是名副其实的"符号服务器"了。


以下介绍如何使用符号服务器:
先介绍windbg中的用法。

1.       设置符号服务器地址;
如我的设置是这样的:*srv*D:\SymbolCache*http://msdl.microsoft.com/download/symbols;\\YourServer\SymbolServer\
后面那部分就是我们的符号服务器地址;

2.       设置源文件服务器地址:
同样,可以通过Windbg的菜单File->Source File Path,设置如下:
*srv*D:\SourceCache*http://svn.yourserver.com/
上述的D:\SourceCache是本地缓存路径,注意自己先把该文件夹建好了;

3.       在windbg中打开某dump文件。
如敲入!analyze -v命令,此时就能够显示相应的源文件信息了,如:
支持源文件索引符号服务器的构建和使用 


牛B了吧,如果没有源文件索引,上述信息是不会显示出来的。 
不过第一次使用时,windbg会弹出如下安装提示:
支持源文件索引符号服务器的构建和使用 

选择最后一项后,今后就不会出现了。 

Visual Studio中的用法更为简单:

在菜单的工具->选项->调试->常规选项中,将如下两个选项勾上:
启用源服务器支持
将源服务器诊断信息打印到输出窗口
如下图:支持源文件索引符号服务器的构建和使用

如此设置后,就可以在VS中打开相应版本的源文件了。

参考文献:
http://www.result42.com/howto/symbol-storage-subversion-indexed-symbols
http://www.codeproject.com/KB/debug/sourceindexing.aspx?display=Printhttp://msdn.microsoft.com/en-us/magazine/cc163563.aspx
http://msdn.microsoft.com/en-us/magazine/cc163563.aspx
第一个文献看起来有理有据,描述了基本过程;不过在细节方面貌似还是有些问题的;
第三个文献很详细... 

 

原文地址:http://blog.sina.com.cn/s/blog_715342050100oxdx.html

转载于:https://www.cnblogs.com/txk1452/archive/2012/08/11/2634030.html

相关文章:

  • 原创开源项目 -- HierarchyViewer for iOS(1)
  • 图片轮换效果 pixviewer.swf的使用
  • jquery 与 discuz 默认JS 冲突解决办法
  • sql查看表的锁并解锁
  • Centos5.5安装MONO2.10.8和Jexus 5.0开启Linux平台.net应用新篇章
  • C++中的const限定修饰符
  • 查看SqlServer表 索引 创建时间,修改时间。或者修改记录(转)
  • 在HTML中添加百度地图(有图)
  • 设计模式(4)之建造者模式
  • 保护模式下中断或异常示意图
  • java override overload
  • 多路访问网络中的挑战
  • 模拟系统提示框
  • DSL概念、类别、为什么要写DSL 1
  • Javascript 日期格式化
  • C++类的相互关联
  • HTTP中GET与POST的区别 99%的错误认识
  • OSS Web直传 (文件图片)
  • socket.io+express实现聊天室的思考(三)
  • Vue 2.3、2.4 知识点小结
  • Vue2.0 实现互斥
  • 前端面试题总结
  • 删除表内多余的重复数据
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ionic入门之数据绑定显示-1
  • 阿里云移动端播放器高级功能介绍
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 容器镜像
  • ​flutter 代码混淆
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (09)Hive——CTE 公共表达式
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (力扣)循环队列的实现与详解(C语言)
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)3D模板阴影原理
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET Reactor简单使用教程
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET6 命令行启动及发布单个Exe文件
  • .net打印*三角形
  • .NET委托:一个关于C#的睡前故事
  • .pop ----remove 删除
  • @Data注解的作用
  • @RequestBody与@ModelAttribute
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku