1、Dump文件是进程的内存镜像,Win7上的dump文件一般保存C:\Windows\Minidump目录下,需要管理员权限才可以访问。
2、要分析dump文件,需要安装windbg,在Windbg中,通过File→Open Crash Dump菜单可以打开dump文件进行分析,如下图所示:
载入dump文件后,在windbg最下面的命令栏中输入:!analyze -v 进行分析即可。!表示是windbg的扩展命令,analyze是扩展的命令, -v是参数。
右击“计算机”-“属性”-“高级系统设置”-“高级”-“启动和故障恢复”设置2.提取蓝屏文件"C:WINDOWSMinidump"dump文件及"C:WINDOWS"MEMERY.DUMP
3.下载安装windbg
4.启动"windbg"-点击"File"-"OpenCrashDump"-选择dump文件
5.找到"probablycausedby"字样确定罪魁祸首
6.一些信息DEFAULT_BUCKET_ID:DRIVER_FAULT//指出错误类型,这里是驱动错误
BUGCHECK_STR:0xD1//bugcheck索引,可查windbg文档,也可"!analyze?showD1"
PROCESS_NAME:NotMyfault.exe//错误所属进程
附:windbg基本调试命令:
r可以显示系统崩溃时的寄存器,和最后的命令状态。
dd显示当前内存地址,dd参数:显示参数处的内存。
u可以显示反汇编的指令
!analyze-...
Windbg生成dump文件的方法:程序崩溃(crash)的时候,为了以后能够调试分析问题,可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为dump文件。步骤:1)打开WinDBG并将之Attach到crash的程序进程2)输入产生dump文件的命令WinDBG产生dump文件的命令是.dump,可以选择不同的参数来生成不同类型的dump文件。选项(1):/m命令行示例:.dump/mC:\dumps\myapp.dmp注解:缺省选项,生成标准的minidump,转储文件通常较小,便于在网络上通过邮件或其他方式传输。这种文件的信息量较少,只包含系统信息、加载的模块(DLL)信息、进程信息和线程信息。选项(2):/ma命令行示例:.dump/maC:\dumps\myapp.dmp注解:带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块,等等),文件很大,但如果条件允许(本机调试,局域网环境),推荐使用这中dump。选项(3):/mFhutwd命令行示例:.dump/mFhutwdC:\dumps\myapp.dmp注解:带有数据段、非共享的读/写内存页和其他有用的信息的minidump。包含了通过minidump能够得到的最多的信息。是一种折中方案那怎么自动生成dump文件呢,比如对方的电脑没有windbg,这里用到一个window系统自带工具,Dr.Watson运行方式很简单:直接run-输入drwtsn32-i就可以了,会提示这样的:这个命令真难记,实话,记华生医生吧,福尔摩斯中的如果有程序崩溃,会自动生成dump,这时再输入drwtsn32就会运行这个程序:找到对应路径的DMP文件就行了,一般放在如下路径:C:\DocumentsandSettings\AllUsers\ApplicationData\Microsoft\DrWatson以下实例来自AWD代码:Copyright(c)AdvancedWindowsDebugging(ISBN0321374460)fromAddison-WesleyProfessional.Allrightsreserved.THISCODEANDINFORMATIONISPROVIDED"ASIS"WITHOUTWARRANTYOFANYKIND,EITHEREXPRESSEDORIMPLIED,INCLUDINGBUTNOTLIMITEDTOTHEIMPLIEDWARRANTIESOFMERCHANTABILITYAND/ORFITNESSFORAPARTICULARPURPOSE.--*/#include"stdafx.h"#include#include#includeVOIDSimulateMemoryCorruption()classCAppInfo{public:CAppInfo(LPWSTRwszAppName,LPWSTRwszVersion){m_wszAppName=wszAppNamem_wszVersion=wszVersion}VOIDPrintAppInfo(){wprintf(L"\nFullapplicationName:%s\n",m_wszAppName)wprintf(L"Version:%s\n",m_wszVersion)}private:LPWSTRm_wszAppNameLPWSTRm_wszVersion}CAppInfo*g_AppInfoint__cdeclwmain(intargc,WCHAR*args[]){wint_tiChar=0g_AppInfo=newCAppInfo(L"MemoryCorruptionSample",L"1.0")if(!g_AppInfo){return1}wprintf(L"Press:\n")wprintf(L"1Todisplayapplicationinformation\n")wprintf(L"2Tosimulatedmemorycorruption\n")wprintf(L"3Toexit\n\n\n>")while((iChar=_getwche())!='3'){switch(iChar){case'1':g_AppInfo->PrintAppInfo()breakcase'2':SimulateMemoryCorruption()wprintf(L"\nMemoryCorruptioncompleted\n")breakdefault:wprintf(L"\nInvalidoption\n")}wprintf(L"\n\n>")}return0}VOIDSimulateMemoryCorruption(){char*pszWrite="Corrupt"BYTE*p=(BYTE*)g_AppInfoCopyMemory(p,pszWrite,strlen(pszWrite))}欢迎分享,转载请注明来源:内存溢出
评论列表(0条)