dump文件_windows程序崩溃时生成dump文件方法
第一种:通过任务管理器:
如果程序挂了的时候,还未退出,比如我运行程序,出现下边的错:
此时打开任务管理器,右击相应进程,点击生成dump文件:
一会创建完成
然后把这个DMP文件拷到开发机器上,用VS打开:会出现下面的界面,要想知道发生错误时候的调用栈,需要设置symbol的路径,点击”Set Symbol Paths“:
注意这个pdb要对应于crash的exe,否则调用栈没法显示:
设置完成后,点击”Debug with Native Only“ 你就可以看到调用栈了。
第二种:通过添加代码生成
如果在无法复现的崩溃后,程序直接退出,可以使用崩溃时自动生成dump文件的方法。
/****************第一步添加createdump.h*********************************
添加一个头文件:createdump.h
#pragma once
#include
#include
#include
#pragma comment(lib, "dbghelp.lib")
inline BOOL IsDataSectionNeeded(const WCHAR* pModuleName)
{
if (pModuleName == 0)
{
return FALSE;
}
WCHAR szFileName[_MAX_FNAME] = L"";
_wsplitpath(pModuleName, NULL, NULL, szFileName, NULL);
if (wcsicmp(szFileName, L"ntdll") == 0)
{
return TRUE;
}
return FALSE;
}
inline BOOL CALLBACK MiniDumpCallback(PVOID pParam, const PMINIDUMP_CALLBACK_INPUT pInput, PMINIDUMP_CALLBACK_OUTPUT pOutput)
{
if (pInput == 0 || pOutput == 0)
return FALSE;
switch (pInput->CallbackType)
{
case ModuleCallback:
if (pOutput->ModuleWriteFlags & ModuleWriteDataSeg)
if (!IsDataSectionNeeded(pInput->Module.FullPath))
pOutput->ModuleWriteFlags &= (~ModuleWriteDataSeg);
case IncludeModuleCallback:
case IncludeThreadCallback:
case ThreadCallback:
case ThreadExCallback:
return TRUE;
default:;
}
return FALSE;
}
inline void CreateMiniDump(EXCEPTION_POINTERS* pep, LPCTSTR strFileName)
{
HANDLE hFile = CreateFile(strFileName, GENERIC_READ | GENERIC_WRITE,0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
{
MINIDUMP_EXCEPTION_INFORMATION mdei;
mdei.ThreadId = GetCurrentThreadId();
mdei.ExceptionPointers = pep;
mdei.ClientPointers = FALSE;
MINIDUMP_CALLBACK_INFORMATION mci;
mci.CallbackRoutine = (MINIDUMP_CALLBACK_ROUTINE)MiniDumpCallback;
mci.CallbackParam = 0;
MINIDUMP_TYPE mdt = (MINIDUMP_TYPE)(MiniDumpWithPrivateReadWriteMemory |MiniDumpWithDataSegs |MiniDumpWithHandleData |0x00000800 /*MiniDumpWithFullMemoryInfo*/ |0x00001000 /*MiniDumpWithThreadInfo*/ |MiniDumpWithUnloadedModules);
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),hFile, mdt, (pep != 0) ? &mdei : 0, 0, &mci);
CloseHandle(hFile);
}
}
/***************第二步*************************************
在main 函数的文件中加入
#include
#include "createdump.h"
LONG WINAPI GPTUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
CreateMiniDump(pExceptionInfo, L"Exception.dmp");
exit(pExceptionInfo->ExceptionRecord->ExceptionCode);
return EXCEPTION_EXECUTE_HANDLER; // 程序停止运行
}
/***************第三步*************************************
在main函数中 加入:
SetUnhandledExceptionFilter(GPTUnhandledExceptionFilter);
这样在程序崩溃的时候,就会自动生成dump文件。
重构:
重构原则
重构原则二
如何重构(一)
设计原则:
设计模式之七大设计原则
创建型设计模式:
设计模式之单例模式
设计模式之工厂模式
设计模式之原型模式
设计模式之建造者模式
结构型设计模式:
设计模式之桥接模式
设计模式之适配器模式
设计模式之外观模式
设计模式之组合模式
设计模式之代理模式
设计模式之享元模式
行为型设计模式:
设计模式之观察者模式
设计模式之策略模式
设计模式之模板模式
dump文件_windows程序崩溃时生成dump文件方法相关推荐
- dump java崩溃自动 不生成_一个宏命令,就可以程序崩溃时生成dump文件
在主程序初始化时加入 DeclareDumpFile(); 创建头文件DumpFile.h, 将下列代码放进文件中 #pragma once #include #include < Dbghel ...
- qt先生成json文件后程序启动时读取json文件在一组数据模拟下正常,换一组数据就出现乱码
提要 程序编号后自己模拟的数据程序在生成和解析json时都正常,但是换了一组数据,生成的json文件中部分中文乱码,且出现json文件的格式被混乱的现象. 效果 上述出现的不正确的json文件,如下: ...
- 生产服务器怎么dmp堆栈信息,如何根据程序崩溃时的DMP文件使用WinDbg查找调用堆栈...
在 Windbg.exe,打开进程的.dmp 文件. 请确保您符号路径指向正确的位置. 有关如何执行此操作,请访问下面的 Microsoft Web 站点: 如何获得符号 http://www.mic ...
- JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式
JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式,以及如何使用Eclips Memory Analyzer(MAT)插件进行堆内存分析. 方法一: jmap -du ...
- java oom dump_JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式
JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式,以及如何使用Eclips Memory Analyzer(MAT)插件进行堆内存分析. 方法一: jmap -du ...
- 栈windows linux,Linux+Windows: 程序崩溃时,在 C++ 代码中,如何获取函数调用栈信息...
一.前言 程序在执行过程中 crash 是非常严重的问题,一般都应该在测试阶段排除掉这些问题,但是总会有漏网之鱼被带到 release 阶段. 因此,程序的日志系统需要侦测这种情况,在代码崩溃的时候获 ...
- php读取cookie文件,PHP读取CURL模拟登录时生成Cookie文件的方法,_PHP教程
PHP读取CURL模拟登录时生成Cookie文件的方法, 本文实例讲述了PHP读取CURL模拟登录时生成Cookie文件的方法.分享给大家供大家参考.具体实现方法如下: 在使用PHP中的CURL模拟登 ...
- windows 7 如何关闭 程序崩溃时弹出的windows正在检查该问题的解决方案
如果你装的镜像一般不会出现这个问题,因为已经被优化了. 原版的会有这个问题,仅作备份! 尊重原创,原文链接点这里 非常讨厌的东西,每当程序崩溃时,总爱假惺惺的弹出一个对话框 滚上几圈就没有下文了. 尤 ...
- linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- 程序崩溃的原因及处理方法
初学C语言/C++程序的编写时,可能经常会遇到程序崩溃的现象.一般来说,程序崩溃是由于内存操作不当引发的.但是具体来讲,由哪些原因可以导致程序崩溃呢?以及当程序崩溃时该如何找到错误的位置呢?本教程即是 ...
最新文章
- JS+CSS点击弹出登陆框代码
- html弹出保存文件对话框_这样操作,3分钟不要就可以在GIS office中轻松导入坐标点文件!...
- 王高利:awstats
- 利用Web Services开发分布式应用
- java 3d游戏_不放一行代码分享一下java实现3D游戏逻辑
- (转)java并发之Executor
- 2020年第十八届西电程序设计竞赛网络预选赛之Problem D 由比滨结衣的饼干(二分+前缀后缀)
- 释放内存软件_原来苹果手机这样清理内存,可以释放大量空间,真是太好用了...
- 【剑指offer】面试题46. 把数字翻译成字符串(java)
- 获取mysql 时钟,员工时钟的MySQL数据库结构
- 机器学习、深度学习资料推荐
- 腾讯 监控系统服务器数据采集,腾讯天津数据中心机房监控项目
- JavaWeb三大组件小结
- 华为盒子联网后显示无法连接服务器,【当贝市场】华为盒子连上无线后不能上网怎么办?...
- win10未能解析服务器名,win10系统提示“无法解析服务器的dns地址”的修复方法...
- 剑风2012年1月要出剧场版了,哇哈哈~~~~~
- Android Audio - 支持多个APK同时录音
- 五种经典卷积神经网络
- 糖果车站的街外小雪初晴
- 淘宝开店须知——新手卖家最基础的运营思路
热门文章
- 「代码随想录」279.完全平方数 【动态规划】力扣详解!
- 「leetcode」406.根据身高重建队列【贪心算法】详解-续集!
- 苹果mac强大的截图录像工具:Snagit
- inDesign教程,如何创建杂志风标注?
- 苹果macPython语言开发环境:PyCharm pro
- Microsoft 365 for Mac(原Office 365)
- mac下载站,这个可以收藏看看
- 如何将Mac“桌面”和“文稿”文件添加到 iCloud 云盘中?
- Kite Compositor for Mac基本工具的使用教程
- RDS数据订阅服务使用说明