随笔分类 -  windows 调试

摘要:SymStore (symstore.exe) 是用于创建符号存储的工具。它被包含在Windows调试工具包中。SymStore按照某种格式存储符号,使得调试器可以通过时间戳、映像大小(对于.dbg或可执行文件)、签名和寿命(.pdb文件)来查找符号。 使用符号存储而不是常规的符号存储格式的好处是,所有符号都可以在同一个服务器上进行存储或引用,而调试器不需要知道具有哪些产品对应的符号。注意,不同版本的.pdb符号文件(例如共有和私有符号)不能保存在相同的符号服务器中,因为他们具有相同的签名和寿命。SymStore事务每个对SymStore的调用都被记录为事务。有两种不同的事务:添加和删除。当创 阅读全文
posted @ 2014-03-01 16:05 小皮球 阅读(1831) 评论(0) 推荐(0)
摘要:pdb是调试程序必不可少的东西,它保存着一个exe或dll的调试信息,对pdb进行源码索引可以快速找到软件对应该版本的代码,本文以subversion版本控制服务器进行介绍一、需要安装的软件windbg,在ddk安装包中可找到TortoiseSVN,安装时要选上命令行工具ActivePerl 三个工具安装完成后要把windbg;windbg\srcsrv;TortoiseSVN\bin;Prel\bin加入到环境变量中二、编译工程,索引PDB文件 以KFileRecovery工程为例,编译后生成exe和PDB 执行svnindex命令进行源码索引,执行命令前切保所的修改的代码已提交到... 阅读全文
posted @ 2014-03-01 01:34 小皮球 阅读(1568) 评论(0) 推荐(0)
摘要:建立Symbols服务器建立SymbolsServer,最简单和方便的办法是使用网络共享路径,典型的,我们会在一台服务器上,依Symbols的类型建立多个路径:\\symbols_server\ReleaseSymbols\\symbols_server\TempSymbols\\symbols_server\WinSymbols其中ReleaseSymbols用于保存所有产品正式发布版本的symbols,这个目录中的pdb文件是不能删除的,TempSymbols用于保存非正式版本(例如测试阶段)的pdb文件,把它们分开保存,是因为pdb文件比较大,如果磁盘空间不够,就可以删除一些TempSy 阅读全文
posted @ 2012-08-13 21:01 小皮球 阅读(1081) 评论(0) 推荐(0)
摘要:VS2003/VS2005/VS2008编译器生成的PDB文件,PDB的签名看上去是一大串乱糟糟的字符串,其实这个字符串分为两部分,由一个随机生成的GUID和一个称为Age的数字组成。例如:C7B874892EAB42EBA4824FEABC928B612前面32个字符是GUID的十六进制大写字符串描述,后面的数字“2”即Age,也是用十六进制字符描述,所不同的是这里用小写字母。对于VS2005,经过反复测试,其PDB签名生成的规则如下:(1)如果增量编译,并且编译前对应的pdb文件存在,则不修改GUID,每次Age数值增1。(2)如果增量编译,但编译前pdb不存在,则重新生成新GUID,并重 阅读全文
posted @ 2012-08-13 20:44 小皮球 阅读(430) 评论(0) 推荐(0)
摘要:当我们开发的Windows程序崩溃时,我们常会将Catch到的Dump文件进行分析。以往当我们拿到一个Dump时,通常是这样做的:1.确定Dump发生时的版本号;2.找到备份的对应版本的PDB文件;3.必要时再找对应版本的源文件;然而,当发布出去的版本较多时,上述过程是很麻烦的;建议一个符号服务器可以为我们省去上述麻烦。----以下介绍带源文件索引的符号服务器的创建过程--------:以下是创建符号服务器的过程,使用符号服务器不需要这些工作;以下描述仅适用于源代码服务器为SubVersion的情形,其他源代码服务器的情况,请参考相应资料。1.准备工作安装Windows Debugging T 阅读全文
posted @ 2012-08-11 21:34 小皮球 阅读(458) 评论(0) 推荐(0)
摘要:关于建设symbol store的建议2006-12-21一、symbol store的需求分析:1、我们现在的调试环境严重依赖开发人员自己使用的开发环境,缺点在于其他人要进行调试要么搭建一个同样的环境,严重地占去大家不必要花费的工作时间,进一步带来的问题是各个版本的源代码流落各处,易出问题,要么就只有交给原开发人员,同样带了严重的交流时间开销,而且不仅原开发人员的工作会被打断,而且需求人还要在这个过程中等待。2、即便是开发人员自己面对不同版本的调试,也是一个令人挠头的事情,即便是现在我们保存了map文件,但是调试的便利与效率,相信也是大家希望进一步提高的。如何改变现有的调试难的问题,并且提高 阅读全文
posted @ 2012-08-11 21:30 小皮球 阅读(289) 评论(0) 推荐(0)
摘要:文/玄魂.PDB文件,全称为“程序数据库”文件。我们使用它(更确切的说是看到它被应用)大多数场景是调试应用程序。目前我们对.PDB文件的普遍认知是它存储了被编译文件的调试信息,作为符号文件存在。那么,它具体包含哪些内容呢?在调试过程中是怎样发挥作用的呢?我们有没有办法去操作这个文件呢?1. PDB文件内容.PDB文件的内部格式,微软并没有公开,现在仍然是一个秘密,但是它提供了相关的API用于调试器来从中获取信息。一个非托管C++程序的PDB文件包含如下信息:l Public, private,和static函数地址l 全局变量的名称和地址l 参数和局部变量的名称及它们在栈中的偏移量l 类型定义 阅读全文
posted @ 2012-08-11 21:17 小皮球 阅读(338) 评论(0) 推荐(0)
摘要:当应用程序被链接以后,代码被逐一地翻译为一个个的地址,优化以后的代码可能初看起来更是面目全非。每当我们使用vs或者windbg等微软的调试工具进行调试的时候,我们可以方便地使用变量名来查看内存、可以使用函数名称来下断点、甚至可以指定某个文件的某一行来下断点。这一切背后是什么在指导调试器工作呢?答案就是符号——pdb或者dbg文件(.NET自己有元数据,符号不需要元数据已有的信息)。 程序运行的时候,计算机只需要逐条执行指令即可。而与源代码对应的关系是完全不需要知道的。这就给调试带来了困难,所以无论什么编译都有自己的一套用于对应代码和可执行程序。各种编译器都有自己保存类似这种对应关系的办法,有. 阅读全文
posted @ 2012-08-11 21:11 小皮球 阅读(431) 评论(0) 推荐(0)