Dump文件分析整理

1. dump介绍

Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开,比如使用WinDbg、VS打开。

Windows下Dump文件分为两大类,内核模式Dump和用户模式Dump。内核模式Dump是操作系统创建的崩溃转储,最经典的就是系统蓝屏,这时候会自动创建内核模式的Dump。用户模式Dump进一步可以分为完整Dump(Full Dump)和迷你Dump(Minidump)。完整Dump包含了某个进程完整的地址空间数据,以及许多用于调试的信息,而Minidump则有许多类型,根据需要可以包含不同的信息,有的可能只包含某个线程和部分模块的信息。在程序开发过程中出现的应用崩溃属于用户模式Dump。

在系统中出现异常或者崩溃的时候来生成dump文件,然后用调试器进行调试,这样就可以把生产环境中的dmp文件拷贝到自己的开发机上,调试就可以找到程序出错的位置。 在C++编程实践中,通常都会遇到内存访问无效、无效对象、堆栈溢出、空指针调用等常见的C/C++问题,而这些问题最后常会导致:系统崩溃。为解决崩溃问题常用的手段一个就是生成dump文件进行代码调试。

特别注意:使用dmp文件和pdb文件调试时dump、exe和pdb三个文件要保持版本一致。

2. Dump文件的生成

2.1 任务管理器

在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程。右键—>创建转储文件。此时会在默认的目录下创建出一个dump文件。此种方法只适用于程序崩溃但没有立即自行退出的情况。倘若程序故障后自行退出,则此方法就难以应用。

2.2 修改注册表

可以在注册表中添加相关信息已确保系统在程序崩溃后自行保存一个dump文件

2.3 WinDbg抓取

程序运行崩溃后,先不关闭程序,将WinDbg附加到改进程上。执行命令:.dump –ma Test.dmp  ,则会产生一个Test.dmp的转储文件。

2.4 程序中加入存储Dump的代码

通过SetUnhandledExceptionFilter设置捕获dump的入口,然后通过MiniDumpWriteDump生成dump文件。

3. 调试dump文件

3.1 VS调试

用VS打开dmp文件。测试时 dmp文件时本地产生的,因此VS会依据dmp文件自行找到exe,pdb和源代码的路径。因此直接点击调试,程序会出错代码行中断。但若dmp文件是exe在另一台机器上产生的,则我们最好把exe,pdb,dmp放到同一文件夹下,必须保证pdb与出问题的exe是同一时间生成的,用VS打开dmp文件后还需要设置符号表文件路径和源代码路径。

 当把pdb文件与dmp文件放入同一目录下时,就不需设置其路径,否则需要设置:工具->选项->调试->符号:

设置源代码路径:属性->调试源代码:

3.2 WinDbg调试

(1)设置pdb路径:File ->Symbol File Path

(2)设置exe路径:File -> Image File Path

(3)设置源代码路径:File -> Source File Path(指sln所在目录)

(4)打开dmp文件:File ->Open Crash Dump

(5)执行命令 !analyze –v

 

4. dump文件创建和源码分析

dump的区别在主要取决于MiniDumpWriteDump的第四个参数MINIDUMP_TYPE。参数定义如下:

typedef enum _MINIDUMP_TYPE {

    MiniDumpNormal                         = 0x00000000,

    MiniDumpWithDataSegs                   = 0x00000001,

    MiniDumpWithFullMemory                 = 0x00000002,

    MiniDumpWithHandleData                 = 0x00000004,

    MiniDumpFilterMemory                   = 0x00000008,

    MiniDumpScanMemory                     = 0x00000010,

    MiniDumpWithUnloadedModules            = 0x00000020,

    MiniDumpWithIndirectlyReferencedMemory = 0x00000040,

    MiniDumpFilterModulePaths              = 0x00000080,

    MiniDumpWithProcessThreadData          = 0x00000100,

    MiniDumpWithPrivateReadWriteMemory     = 0x00000200,

    MiniDumpWithoutOptionalData            = 0x00000400,

    MiniDumpWithFullMemoryInfo             = 0x00000800,

    MiniDumpWithThreadInfo                 = 0x00001000,

    MiniDumpWithCodeSegs                   = 0x00002000,

    MiniDumpWithoutManagedState            = 0x00004000,

} MINIDUMP_TYPE;

MINIDUMP_TYPE枚举是一些标志,允许我们来控制minidump包含哪些内容。

MiniDumpNormal

MiniDumpNormal是一个特别的标志。它的值是0,意味着这个值永远隐含存在,甚至不需要显示指定。因此,我们可以假定这个标记代表了minidump中永远存在的一组基础数据集合。通过指定用户自定义的回调函数,可以过滤这些值。

MiniDumpWithFullMemory

这可能是除了MiniDumpNormal以外使用最多的标志了。如果指定了这个标志,minidump会包含进程地址空间中所有可读页面的内容。我们可以看到应用程序分配的所有内存,这使我们有很多的调试方法。可以查看存储在栈上、堆上、模块数据段的所有数据。甚至还可以看到线程和进程环境块(Process Environment Block和Thread Environment Bolck, PEB和TEB)的数据。这些没有公开的数据结构可以给我们的调试提供无价的帮助。

使用这个标记的唯一问题是会使minidump变得很大,至少有几MByte。另外,minidump的内容里面包含了冗余信息,所有可执行模块的代码段都包含在了里面。但是很多时候,我们很容易从其他地方获得可执行代码。

MiniDumpWithFullMemoryInfo

如果希望检查整个继承的虚拟内存布局,我们可以使用MiniDumpWithFullMemoryInfo标志。如果指定它,mindump会包含进程虚拟内存布局的完整信息。可以通过WinDbg的!vadump和!vprot命令查看。这个标志对minidump大小的影响取决于虚拟内存布局-每个有相似特性的页面区域(参考VirtualQuery函数说明)会增加48字节。

MiniDumpWithHandleData

如果指定这个标志,minidump会包括故障时刻进程故障表里面的所有句柄。可以用WinDbg的!handle来显示这些信息。

这个标志对于minidump大小的影响取决于进程句柄表中的句柄数量。

MiniDumpWithThreadInfo

MiniDumpWithThreadInfo可以帮助收集进程中线程的附加信息。对于每一个线程,会提供下列信息:

线程时间 (创建时间,执行用户代码和内核代码的时间)

入口地址

相关性

WinDbg中,可以通过.ttime命令查看线程时间。

MiniDumpWithUnloadedModules

包含未加载模块信息(windows server 2003 sp1, windows xp sp2及以上系统能获取到这块信息)

 

 

 

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 电梯卡dump数据分析是指对于电梯卡在特定时间内使用电梯的记录进行整理分析,从中获取有用信息的过程。电梯卡dump数据中可能包含的信息有:时间、地点、使用者、电梯编号等。数据分析的目的是为了更加有效地管理和维护电梯设备,提升电梯的安全性和服务质量。 电梯卡dump数据可以通过一些软件进行处理和分析,如SQL、Excel等。典型的分析方法包括: 1.统计电梯使用次数和使用率,以便了解电梯设备的繁忙程度和使用效率。 2.分析电梯运行时间和停留时间,以便发现电梯故障和瓶颈,并优化电梯的运行计划。 3.识别电梯使用高峰时段和热门地点,并进行运营调整,以便提供更为高效的服务。 4.探测电梯的异常使用情况,如有人长期占用电梯、过多人员滞留等,及时发现和解决潜在安全问题。 综上所述,电梯卡dump数据分析是电梯设备管理的重要工具,通过对数据的精准处理和分析,可以帮助实现电梯设备的全面管理,提高电梯安全性和用户体验。 ### 回答2: 电梯卡dump数据分析可进一步优化电梯运营。电梯卡在进入或离开电梯时被扫描,记录了入离电梯时间及所处楼层。通过对这些数据的分析,可以从以下几个方面来优化电梯运营。 首先,电梯卡分析可以确定峰值楼层和高峰时段。根据这些数据,电梯管理员可以合理调配电梯资源,特别是在人流量较大的高峰时段,提高电梯的效率和安全性。 其次,电梯卡分析可以确保电梯安全。当电梯卡被扫描时,记录了电梯所处的楼层,如果出现电梯故障,可以通过电梯卡数据分析找出故障点,进行及时维修,避免出现安全问题。 最后,电梯卡分析可以帮助管理人员及时发现电梯故障。通过分析电梯卡数据,管理员可以了解到电梯的使用频率、楼层分布等情况,针对性地制定维护计划,提高电梯的运营效率。 总之,电梯卡dump数据分析可以为电梯管理提供有价值的数据分析支持,进一步提高电梯运营效率及安全性。 ### 回答3: 电梯卡dump数据分析,首先需要理解dump数据是什么。dump数据是指系统异常崩溃时,系统把内存中的数据存储在硬盘上的一种技术。电梯卡dump数据则是指电梯系统异常时,系统储存的相关数据。通过对电梯卡dump数据的分析,可以更准确地定位问题并进行解决。 电梯卡dump数据分析的步骤可以分为以下几个: 1. 收集dump文件。一旦电梯系统出现故障,就需要尽快收集相应的dump文件。 2. 阅读dump文件内容。使用特定的工具,如WinDbg,读取dump文件中的内容,包括错误代码、内存中的堆栈等。 3. 分析dump文件中的数据。分析dump文件中的数据可以帮助我们确定具体的故障原因,例如内存泄漏、死锁等。 4. 解决问题。根据分析结果进行解决问题的操作,可能需要对电梯系统进行升级、维护或更换硬件等。 总之,电梯卡dump数据分析是一种非常重要的技术,可以帮助工程师更好地定位问题并解决电梯系统中出现的故障。需要注意的是,对于非专业人员,dump数据分析需要更多的专业知识和技能,以便准确地进行分析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值