Chrome的CrashReport服务.docx
上传人:sy****28 上传时间:2024-09-14 格式:DOCX 页数:18 大小:232KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

Chrome的CrashReport服务.docx

Chrome的CrashReport服务.docx

预览

免费试读已结束,剩余 8 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://www.cppblog.com/woaidongmao/archive/2009/10/22/99211.html"Chrome的CrashReport服务本文翻译自debugInfo网站上一篇文章HYPERLINK"http://www.debuginfo.com/articles/gendebuginfo.html"generatingdebuginformationwithvisualc++。由于Chrome的Crash产生的Debug信息和这个有一些关系,因此做一些背景知识介绍简介当我们采用一个调试器调试一个应用程序时,我们总是希望能单步跟踪代码、设置断点、查看变量值,哪怕变量是自定义的用户类型。但是对于一个EXE程序来说,基本上就是一堆二进制数据(目前的Windows中EXE程序中还包含了一些头部信息,用于系统执行程序)。当一个EXE程序运行时,系统将为这些EXE分配一些额外的内存用于存储运行时数据(Stack,Heap)。但是依旧没有任何调试方面的信息。当程序Coredump时,像WinDBG这些调试器是如何定位到哪一行的呢,这些都是VisualStudio中的一些编译特性。调试信息种类在IntelX86指令体系下的Windows平台,一个EXE或者DLL中主要有下面几种调试信息:Debug类型说明Publicfunctionsandvariables主要包括了一些全局变量和全局函数信息。在Debug信息中主要存储了他们的位置、大小、名字信息Privatefunctionsandvariables主要包含了非全局的变量和函数信息。SourceFileandLineInformation主要包含了每一行代码在EXE中的对应位置信息TypeInformation主要存储了各种数据类型信息,包括用户自定义的数据类型FPOInformationFPO(FramePointerOmission)。FramePointer是一种用来在调用堆栈(Callstack)中找到下一个将要被调用的函数的数据结构源代码的行序号(Source-linenumbers);编译器可针对这一特性做优化,Debug信息中依旧可以存储一些信息,用来查询函数的栈区帧大小信息。EditandContinueInformation主要包含了要实现用户编辑后可以继续执行特性的相关信息。表1Windows平台下调试信息分类调试文件格式分类在过去二十多年的时间里,微软采用了三种形式来存储DEBUG信息:COFF,CodeView,ProgramDatabase。我们从三个维度来对比分析一下这三种格式:1.每种格式中存储了哪些调试信息?2.每种格式的调试信息存储在哪里?(包含在EXE中还是单独的调试信息文件)3.每种格式的设计文档是否齐全?COFF这是最老的一种格式,只能存储三种信息:Publicfunctionsandvariables,sourcefileandlineinformation,FPO信息。COFF信息是存储在EXE文件中的,不能单独存储。这种格式文档有详细的说明:HYPERLINK"http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx"MicrosoftPortableExecutableandCommonObjectFileFormatSpecification。CodeView这是在COFF基础上推出的一个更为复杂一些的格式。它可以存储表1中除了EditandContinueInformation外的其他信息。CodeView信息通常存储在EXE文件中,但是它也可以存储在单独的文件(.DBG)中。CodeView的格式文档在MSDN上有部分说明,不是很齐全。ProgramDatabase这是微软最新的格式。他可以存储表1中所有信息。另外,他还存储了增量链接(increaseLinking)信息。这在其他格式中不可能存在的。ProgramDatabase格式信息通常存储在单独的文件(.PDB)中。ProgramDatabase格式微软并没有提供格式文档说明。但是微软提供了两套SDK接口:DBGHelp和DIA供用户调用。PDB有两个版本,一个是PDB2.0,主要在VS6.0中使用。一个是PDB7.0,主要用在VisualStudio.NET之后的版本。DBGHelp是普通的API接口。而DIA提供的是COM接口。相对来说DBGHelp使用起来相对简单一些,但是DIA提供的信息相对丰富一些。下表是三种格式的对比:格式文档齐全度存储publicfunctionandvariablesTyp