20.windbg-.dump(转储文件)

.dump

.dump 命令创建一个用户模式或内核模式崩溃转储文件。分析工具:https://msdn.microsoft.com/en-us/library/windows/desktop/ee416349(v=vs.85).aspx#writing_a_minidump

程序崩溃(crash)的时候, 为了以后能够调试分析问题, 可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为dump 文件。 步骤:

1) 打开WinDBG并将之Attach 到crash的程序进程

2) 输入产生dump 文件的命令

直接用.dump -?可以看到它的简单说明:

0:000> .dump -?
Usage: .dump [options] filename
Options are:
  /a - Create dumps for all processes (requires -u)
  /b[a] - Package dump in a CAB and delete dump
  /c <comment> - Add a comment (not supported in all formats)
  /j <addr> - Provide a JIT_DEBUG_INFO address
  /f - Create a legacy style full dump
  /m[acdfFhiprRtuw] - Create a minidump (default)
  /o - Overwrite any existing file
  /u - Append unique identifier to dump name

 

/o :覆盖具有相同名字的dump文件。如果没有使用该选项又存在一个相同名字的文件,则dump文件不会被写入:比如我的C盘原有一个myapp.dmp文件:
0:000> .dump c:/myapp.dmp
Unable to create file 'c:/myapp.dmp' - Win32 error 0n80
    "文件存在。"
0:000> .dump /o c:/myapp.dmp
Creating c:/myapp.dmp - mini user dump
Dump successfully written
/f (用户模式:) 创建一个 完整用户模式dump,这里要注意不要字面理解,

完整用户模式dump是基本的用户模式dump文件。这种dump文件包含进程的完整内存空间、程序本身的可执行映像、句柄表和其他对调试器有用的信息

注意 和名字无关,最大的"minidump"文件实际上可以提供比完整用户模式dump更多的信息。例如,.dump /mf.dump /ma将创建比.dump /f更大更完整的文件。

用户模式下,使用.dump /m[MiniOptions] 是最好的选择。通过这个开关创建的dump文件可以很小也可以很大。通过指定合适的MiniOptions 可以控制究竟需要包含哪些信息。

 

0:000> .dump /o/f c:/myapp.dmp
*****************************************************************************
* .dump /ma is the recommend method of creating a complete memory dump      *
* of a user mode process.                                                   *
*****************************************************************************
Creating c:/myapp.dmp - user full dump
Dump successfully written


我们看到了,系统给出了提示:.dump /ma是创建完整dump的推荐方式(用户模式下)

/m[ MiniOptions] 创建一个 小内存dump(内核模式)或者 minidump(用户模式)。如果没有指定 /f /m/m 是默认选项。 用户模式下, /m 后面可以跟附加的 MiniOptions 用来指定dump文件中包含的数据。如果没有使用 MiniOptions ,dump文件包含模块、线程和调用堆栈信息,但是没有其他附加信息
MiniOption作用
a 创建一个包含所有附加选项的minidump。/ma选项相当于/mfFhut —它会在minidump中添加完整的内存数据、句柄数据、已卸载模块信息、基本内存信息和线程时间信息。
f 在minidump中包含完整内存数据。目标程序拥有的所有 可访问的已交付的页面(committed pages)都会包含进去。
F 在minidump中添加所有基本内存信息。这会将一个流加入到包含完整基本内存信息的minidump中,而不单是可使用的内存。这样可以使得调试器能够重建minidump生成时进程的完整虚拟内存布局。
h 在minidump中包含和目标进程相关的句柄信息。
u 在minidump中包含已卸载模块信息。仅在Windows Server 2003和之后版本的Windows中可用。
t 在minidump中包含附加的线程信息。包括可以在调试minidump时使用!runaway扩展命令或.ttime (Display Thread Times)命令进行显示的线程时间。
i 在minidump中包含次级内存(secondary memory)。次级内存是由堆栈中的指针或备份存储(backing store)中引用到的任何内存,加上该地址周围的一小段区域。
p 在minidump中包含进程环境块(PEB)和线程环境块(TEB)。这在想访问程序的进程和线程相关的Windows系统信息时很有用。
w 将所有已交付的可读写的私有页面包含进minidump。
d 在minidump中包含可执行映像中所有可读写的数据段。
c 加入映像中的代码段。
r 从minidump中去掉对重建调用堆栈无用的堆栈和存储内存部分。局部变量和其他数据类型值也被删除。这个选项不会使得minidump变小(因为这些内存节仅仅是变成0),但是当想保护其他程序中的机密信息时有用。
R 在minidump中去掉完整的模块路径。仅包含模块名。如果想保护用户的目录结构时该选项有用。

选项(1): /m

命令行示例:.dump /m C:/dumps/myapp.dmp

注解: 缺省选项,生成标准的minidump, 转储文件通常较小,便于在网络上通过邮件或其他方式传输。 这种文件的信息量较少,只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息。

选项(2): /ma

命令行示例:.dump /ma C:/dumps/myapp.dmp

注解: 带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块,等等),文件很大,如果条件允许(本机调试,局域网环境), 推荐使用这中dump。

选项(3):/mFhutwd

命令行示例:.dump /mFhutwd C:/dumps/myapp.dmp

注解:带有数据段、非共享的读/写内存页和其他有用的信息的minidump。包含了通过minidump能够得到的最多的信息。是一种折中方案。

Fhutwd按字母对应上面的MiniOptions表示

 

//-xp自动生成dump-----------------------------------------------------------------------------------------------------------------------------------------------------------------

那怎么自动生成dump文件呢,比如对方的电脑没有windbg,这里用到一个window XP系统自带工具,Dr.Watson

运行方式很简单:

直接run-输入drwtsn32 -i就可以了,会提示这样的:

这个命令真难记,实话,记华生医生吧,福尔摩斯中的

如果有程序崩溃,会自动生成dump,这时再输入drwtsn32就会运行这个程序:

找到对应路径的DMP文件就行了,一般放在如下路径:
C:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson

 

 //-win7自动生成dump-----------------------------------------------------------------------------------------------------------------------------------------------------------------

win7下需打开regedit--> 找到:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting]

在它下面加一项LocalDumps,并做如下项配置:

Value描述Type默认值
DumpFolder文件保存路径REG_EXPAND_SZ%LOCALAPPDATA%CrashDumps
DumpCountdump文件的最大数目REG_DWORD10
DumpType指定生成的dump类型:
0:Custom dump
1:Mini dump
2:Full dump
REG_DWORD1
CustomDumpFlags仅在DumpType为0时使用
为MINIDUMP_TYPE的组合
REG_DWORD
MiniDumpWithDataSegs|
MiniDumpWithUnloadedModules|
MiniDumpWithProcessThreadData





 





可以写成.bat:

@echo off
echo 设置Dump...
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "C:\MyDump" /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpType /t REG_DWORD /d 2 /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /v DumpCount /t REG_DWORD /d 10 /f
echo Dump已经设置
pause
@echo on
@echo off
echo 正在取消设置Dump...
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" /f
echo Dump已经取消设置
pause
@echo on

LocalDumps是全局的,如果想针对指定进程单独设置,如test1.exe,则在/LocalDumps下新建子项test1.exe,同时在test1目录下复制上表的选项,这样,系统就会先读全局设置,再读子项test1.exe的设置


  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windbg是一种强大的Windows调试工具,可以用于分析和调试应用程序的崩溃和错误。静态分析dump文件是一种分析崩溃或错误产生时的内存文件的方法。以下是关于如何使用Windbg进行静态分析dump文件的步骤: 首先,我们需要在Windbg中打开dump文件。可以使用以下命令:windbg.exe -z "dump文件路径"。这将加载dump文件并显示Crash Dump Analysis工具。 一旦打开了dump文件,我们可以使用Windbg提供的命令来执行静态分析。以下是一些常用的命令: 1. !analyze -v:这个命令用于自动分析崩溃的原因和调用栈信息。它将提供有关错误的详细信息,例如异常类型、出错地址和相关模块。 2. lm:这个命令用于列出加载的模块。通过检查模块信息,我们可以查看是否存在冲突、错误或过期的模块。 3. .hh:这个命令用于打开Windbg的帮助文档。在静态分析时,我们可能需要查阅文档以了解特定命令和选项的用法。 4. !heap:这个命令用于分析应用程序的堆内存。通过了解堆的使用情况,我们可以检查内存分配错误、内存泄漏或其他内存相关问题。 5. dt命令:这个命令用于查看特定类型的结构。我们可以使用它来检查内存中的对象、变量和数据结构,以了解它们的状态和值。 除了以上提到的命令,Windbg还提供了许多其他强大的调试命令,用于不同类型的分析需求。 总之,通过使用Windbg进行静态分析dump文件,我们可以了解应用程序崩溃的原因、了解调用栈信息、检查模块、解决内存相关问题等。这对于诊断和修复软件错误非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值