青岛开办公司要做网站吗,有那个网站可以做报名链接的,微商城怎么做,2020应该建设什么网站1. Dump文件 1. Dump文件介绍 Dump文件(Dump File)#xff0c;也叫转储文件#xff0c;以.DMP为文件后缀。dump文件是进程在内存中的镜像文件#xff0c;通过转换然后存储成以.DMP后缀的文件。dump文件根据存储时的选项不同#xff0c;会生成不同大小的文件#xff0c;其中… 1. Dump文件 1. Dump文件介绍 Dump文件(Dump File)也叫转储文件以.DMP为文件后缀。dump文件是进程在内存中的镜像文件通过转换然后存储成以.DMP后缀的文件。dump文件根据存储时的选项不同会生成不同大小的文件其中记录信息也自然有所不同。 2. Dump文件分类 程序分两种内核模式程序和用户模式程序也即Ring0程序和Ring3程序。Dump文件是伴随着程序而生成的所以Dump文件也同样分两种。 1. Kernel-Mode Dump Files(内核模式Dump文件)主要是驱动程序此文不涉及。 2. User-Mode Dump Files(用户模式Dump文件)主要是应用程序及服务程序此文所讲。 用户模式Dump文件又分Full User-Mode Dumps和Minidumps。前者生成的是完整的内存快照所以文件比较大。后者依然生成选项生成包含不同信息的Dump文件。此文以Minidumps文件来分析调试。 3. Dump文件生成方式
通过WinDbg工具的命令 用WinDbg来Attach崩溃提示窗口的process然后输入.dump /m C:\myapp.dmp命令即可生成默认的miniDump文件(只包含系统信息、加载的模块DLL信息、 进程信息和线程信息)。通过Windows任务管理器选择指定进程右键生成转储文件(此时的转储文件即为Full User-Mode Dumps包含所有信息所以文件比较大)。通过代码在程序崩溃时生成Dump文件。
#include DbgHelp.h
#pragma comment(lib, Dbghelp.lib)
// 此函数需要包含上面头文件和引入相应的库
LONG WINAPI ExceptionFilter(EXCEPTION_POINTERS* _pExcp)
{ HANDLE hFile CreateFile( d:\\Format.dmp, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE hFile) {return EXCEPTION_CONTINUE_EXECUTION;}MINIDUMP_EXCEPTION_INFORMATION einfo {0};einfo.ThreadId ::GetCurrentThreadId(); einfo.ExceptionPointers _pExcp; einfo.ClientPointers FALSE; MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, // 指定生成默认的Minidump文件einfo, NULL, NULL); CloseHandle(hFile); return EXCEPTION_EXECUTE_HANDLER;
}// 下面函数放在当前模块的入口函数处,指定ExceptionFilter替换原生的异常处理
// 即当原本要弹出崩溃提示窗口前,需要经过此函数处理,可以处理完立即退出,也可以继续
SetUnhandledExceptionFilter(ExceptionFilter); 12345678910111213141516171819202122232425262728293031323334353637381234567891011121314151617181920212223242526272829303132333435363738 2. 分析Dump文件 1. 使用Visual Studio
选择与生成Dump文件相同版本的VS。启动VS并打开Dump文件。必须保证生成Dump文件的程序的PDB文件和源代码相一致。VS2005打开Dump文件时直接按F5调试代码会停在出错的地方通过Call Stack窗口查看。VS2010打开Dump文件时 需要通过Set symbol paths设置符号文件路径也即PDB文件路径。然后点击Debug with Native Only代码即会暂时在出错的地方通过Call Stack窗口查看相关信息。 2. 使用WinDbg
选择相应版本的WinDbgx86还是AMD64(也即X64,因为64桌面架构系统是AMD最新发布)。File-Open Crush Dump打开指定的Dump文件。File-Symbol File Path添加srv*D:\Symbols*http://msdl.microsoft.com/download/symbolsFile-Symbol File Path添加程序的PDB文件夹路径。这样可以调试系统DLL也可以调试自有程序。然后在WinDbg命令行中输入analyze -v等待WinDbg分析完毕。通过上图即可以看到代码崩溃的行数。 3. 自定义崩溃窗口
通常Windows会提供一个默认的崩溃提示窗口,或者是程序直接闪退。 重写ExceptionFilter函数即可以重新定义崩溃窗口用以提示用户发送相关信息给软件提供商。 示例代码 示例代码是Win32类型的DLL,导出接口SetCustomUnhandledExceptionFilter在Solution的启动Project的最开始调用一次即可。