dump文件
一、 生成dump文件方式
1.1任务管理器
在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程。右键—>创建转储文件。
此时会在默认的目录下创建出一个dump文件。
可以看出,此种方法只适用于程序崩溃但没有立即自行退出的情况。倘若程序故障后自行退出,则此方法就难以应用。不过,我们可以在注册表中添加如下信息已确保系统在程序崩溃后自行保存一个dump文件:
在注册表中找到
HKEY_local_MACHINE\SOFTWARE\Microsoft\windows\WindowsERROR Reporting\LocalDumps
添加项如下图:
其中DumpType代表的含义是:
0 = Create a custom dump
1 = Mini dump
2 = Full dump
如此一来,一旦程序崩溃,系统会在C:\crashdump下生成一个dump文件。
1.2WinDbg抓取
程序运行崩溃后,先不关闭程序,将WinDbg附加到改进程上。
执行命令:.dump –ma Test.dmp ,则会产生一个Test.dmp的转储文件。
1.3程序中加入存储Dump的代码
通过SetUnhandledExceptionFilter设置捕获dump的入口,然后通过MiniDumpWriteDump生成dump文件。
如下程序在程序异常时会自行转储一个名为Test.dmp的dump文件。
[cpp] view plain copy
- #include<Windows.h>
- #include<DbgHelp.h>
- #pragma comment(lib,"DbgHelp.lib")
- // 创建Dump文件
- void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException)
- {
- HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
- // Dump信息
- MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
- dumpInfo.ExceptionPointers = pException;
- dumpInfo.ThreadId = GetCurrentThreadId();
- dumpInfo.ClientPointers = TRUE;
- // 写入Dump文件内容
- MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
- CloseHandle(hDumpFile);
- }
- // 处理Unhandled Exception的回调函数
- LONG APPlicationCrashhandler(EXCEPTION_POINTERS *pException)
- {
- CreateDumpFile(L"Test.dmp",pException);
- return EXCEPTION_EXECUTE_HANDLER;
- }
- void fun(int *p)
- {
- p[0]=0;
- }
- int main(int argc, char * argv[])
- {
- //注册异常处理函数
- SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
- fun(NULL);
- return 0;
- }
二、调试Dump文件
2.1.VS调试
用VS打开dmp文件。测试时 dmp文件时本地产生的,因此VS会依据dmp文件自行找到exe,pdb和源代码的路径。因此直接点击调试,程序会出错代码行中断。但若dmp文件是exe在另一台机器上产生的,则我们最好把exe,pdb,dmp放到同一文件夹下,必须保证pdb与出问题的exe是同一时间生成的,用VS打开dmp文件后还需要设置符号表文件路径和源代码路径:
(1) 当把pdb文件与dmp文件放入同一目录下时,就不需设置其路径,否则需要设置
工具->选项->调试->符号:
(2)还需设置源代码路径:
属性->调试源代码:
这样点击“使用仅限本机进行调试”,即可在出错代码行中断:
2.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
由分析结果可以看出,在main.cpp第7行出错,错误类型:NULL_POINTER_WRITE.
相关阅读
商品详情页是电子商务网站中最容易与用户产生交集共鸣的页面,详情页的设计极有可能会对用户的购买行为产生直接的影响。因此,商品详
成熟的产品每一项功能都有其背后的逻辑,都是经过严格的数据分析以及用户研究得来的,目的都在提供给用户更好的体验。一、产品背景与
体验环境:手机:Android 6.0.1 MI 4豆果美食:Android v6.2.4.2下厨房:Android v5.9.11一、行业背景从易观数据中我们可以看到,预计2016
用户使用短视频应用拍摄和发布视频,需要走完整个视频发布流程。视频发布流程影响着用户发布视频的体验。比较秒拍、火山小视频和美
当我们在面对一头牛——复杂的业务需求时,如果不得其构造,不明其法,是不能够很好的拆解的。只有对需求深入了解,按照其本来的构造,在筋