08 2012 档案
摘要:建立Symbols服务器建立SymbolsServer,最简单和方便的办法是使用网络共享路径,典型的,我们会在一台服务器上,依Symbols的类型建立多个路径:\\symbols_server\ReleaseSymbols\\symbols_server\TempSymbols\\symbols_server\WinSymbols其中ReleaseSymbols用于保存所有产品正式发布版本的symbols,这个目录中的pdb文件是不能删除的,TempSymbols用于保存非正式版本(例如测试阶段)的pdb文件,把它们分开保存,是因为pdb文件比较大,如果磁盘空间不够,就可以删除一些TempSy
阅读全文
摘要:VS2003/VS2005/VS2008编译器生成的PDB文件,PDB的签名看上去是一大串乱糟糟的字符串,其实这个字符串分为两部分,由一个随机生成的GUID和一个称为Age的数字组成。例如:C7B874892EAB42EBA4824FEABC928B612前面32个字符是GUID的十六进制大写字符串描述,后面的数字“2”即Age,也是用十六进制字符描述,所不同的是这里用小写字母。对于VS2005,经过反复测试,其PDB签名生成的规则如下:(1)如果增量编译,并且编译前对应的pdb文件存在,则不修改GUID,每次Age数值增1。(2)如果增量编译,但编译前pdb不存在,则重新生成新GUID,并重
阅读全文
摘要:当我们开发的Windows程序崩溃时,我们常会将Catch到的Dump文件进行分析。以往当我们拿到一个Dump时,通常是这样做的:1.确定Dump发生时的版本号;2.找到备份的对应版本的PDB文件;3.必要时再找对应版本的源文件;然而,当发布出去的版本较多时,上述过程是很麻烦的;建议一个符号服务器可以为我们省去上述麻烦。----以下介绍带源文件索引的符号服务器的创建过程--------:以下是创建符号服务器的过程,使用符号服务器不需要这些工作;以下描述仅适用于源代码服务器为SubVersion的情形,其他源代码服务器的情况,请参考相应资料。1.准备工作安装Windows Debugging T
阅读全文
摘要:关于建设symbol store的建议2006-12-21一、symbol store的需求分析:1、我们现在的调试环境严重依赖开发人员自己使用的开发环境,缺点在于其他人要进行调试要么搭建一个同样的环境,严重地占去大家不必要花费的工作时间,进一步带来的问题是各个版本的源代码流落各处,易出问题,要么就只有交给原开发人员,同样带了严重的交流时间开销,而且不仅原开发人员的工作会被打断,而且需求人还要在这个过程中等待。2、即便是开发人员自己面对不同版本的调试,也是一个令人挠头的事情,即便是现在我们保存了map文件,但是调试的便利与效率,相信也是大家希望进一步提高的。如何改变现有的调试难的问题,并且提高
阅读全文
摘要:好不容易复现的宕机bug,结果不产生dump文件,让俺情何以堪啊!坑爹嘛!大部分情况还好,就是弹出这种“Runtime Error”框的时候,不产生dump文件,解决它!!!VS2005中SetUnhandledExceptionFilter函数应用很多软件通过设置自己的异常捕获函数,捕获未处理的异常,生成报告或者日志(例如生成mini-dump文件),达到Release版本下追踪Bug的目的。但是,到了VS2005(即VC8),Microsoft对CRT(C运行时库)的一些与安全相关的代码做了些改动,典型的,例如增加了对缓冲溢出的检查。新CRT版本在出现错误时强制把异常抛给默认的调试器(如果
阅读全文
摘要:文/玄魂.PDB文件,全称为“程序数据库”文件。我们使用它(更确切的说是看到它被应用)大多数场景是调试应用程序。目前我们对.PDB文件的普遍认知是它存储了被编译文件的调试信息,作为符号文件存在。那么,它具体包含哪些内容呢?在调试过程中是怎样发挥作用的呢?我们有没有办法去操作这个文件呢?1. PDB文件内容.PDB文件的内部格式,微软并没有公开,现在仍然是一个秘密,但是它提供了相关的API用于调试器来从中获取信息。一个非托管C++程序的PDB文件包含如下信息:l Public, private,和static函数地址l 全局变量的名称和地址l 参数和局部变量的名称及它们在栈中的偏移量l 类型定义
阅读全文
摘要:当应用程序被链接以后,代码被逐一地翻译为一个个的地址,优化以后的代码可能初看起来更是面目全非。每当我们使用vs或者windbg等微软的调试工具进行调试的时候,我们可以方便地使用变量名来查看内存、可以使用函数名称来下断点、甚至可以指定某个文件的某一行来下断点。这一切背后是什么在指导调试器工作呢?答案就是符号——pdb或者dbg文件(.NET自己有元数据,符号不需要元数据已有的信息)。 程序运行的时候,计算机只需要逐条执行指令即可。而与源代码对应的关系是完全不需要知道的。这就给调试带来了困难,所以无论什么编译都有自己的一套用于对应代码和可执行程序。各种编译器都有自己保存类似这种对应关系的办法,有.
阅读全文

浙公网安备 33010602011771号