第一种:通过任务管理器:

如果程序挂了的时候,还未退出,比如我运行程序,出现下边的错:

此时打开任务管理器,右击相应进程,点击生成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文件方法相关推荐

  1. dump java崩溃自动 不生成_一个宏命令,就可以程序崩溃时生成dump文件

    在主程序初始化时加入 DeclareDumpFile(); 创建头文件DumpFile.h, 将下列代码放进文件中 #pragma once #include #include < Dbghel ...

  2. qt先生成json文件后程序启动时读取json文件在一组数据模拟下正常,换一组数据就出现乱码

    提要 程序编号后自己模拟的数据程序在生成和解析json时都正常,但是换了一组数据,生成的json文件中部分中文乱码,且出现json文件的格式被混乱的现象. 效果 上述出现的不正确的json文件,如下: ...

  3. 生产服务器怎么dmp堆栈信息,如何根据程序崩溃时的DMP文件使用WinDbg查找调用堆栈...

    在 Windbg.exe,打开进程的.dmp 文件. 请确保您符号路径指向正确的位置. 有关如何执行此操作,请访问下面的 Microsoft Web 站点: 如何获得符号 http://www.mic ...

  4. JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式

    JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式,以及如何使用Eclips Memory Analyzer(MAT)插件进行堆内存分析. 方法一: jmap -du ...

  5. java oom dump_JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式

    JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式,以及如何使用Eclips Memory Analyzer(MAT)插件进行堆内存分析. 方法一: jmap -du ...

  6. 栈windows linux,Linux+Windows: 程序崩溃时,在 C++ 代码中,如何获取函数调用栈信息...

    一.前言 程序在执行过程中 crash 是非常严重的问题,一般都应该在测试阶段排除掉这些问题,但是总会有漏网之鱼被带到 release 阶段. 因此,程序的日志系统需要侦测这种情况,在代码崩溃的时候获 ...

  7. php读取cookie文件,PHP读取CURL模拟登录时生成Cookie文件的方法,_PHP教程

    PHP读取CURL模拟登录时生成Cookie文件的方法, 本文实例讲述了PHP读取CURL模拟登录时生成Cookie文件的方法.分享给大家供大家参考.具体实现方法如下: 在使用PHP中的CURL模拟登 ...

  8. windows 7 如何关闭 程序崩溃时弹出的windows正在检查该问题的解决方案

    如果你装的镜像一般不会出现这个问题,因为已经被优化了. 原版的会有这个问题,仅作备份! 尊重原创,原文链接点这里 非常讨厌的东西,每当程序崩溃时,总爱假惺惺的弹出一个对话框 滚上几圈就没有下文了. 尤 ...

  9. linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  10. 程序崩溃的原因及处理方法

    初学C语言/C++程序的编写时,可能经常会遇到程序崩溃的现象.一般来说,程序崩溃是由于内存操作不当引发的.但是具体来讲,由哪些原因可以导致程序崩溃呢?以及当程序崩溃时该如何找到错误的位置呢?本教程即是 ...

最新文章

  1. JS+CSS点击弹出登陆框代码
  2. html弹出保存文件对话框_这样操作,3分钟不要就可以在GIS office中轻松导入坐标点文件!...
  3. 王高利:awstats
  4. 利用Web Services开发分布式应用
  5. java 3d游戏_不放一行代码分享一下java实现3D游戏逻辑
  6. (转)java并发之Executor
  7. 2020年第十八届西电程序设计竞赛网络预选赛之Problem D 由比滨结衣的饼干(二分+前缀后缀)
  8. 释放内存软件_原来苹果手机这样清理内存,可以释放大量空间,真是太好用了...
  9. 【剑指offer】面试题46. 把数字翻译成字符串(java)
  10. 获取mysql 时钟,员工时钟的MySQL数据库结构
  11. 机器学习、深度学习资料推荐
  12. 腾讯 监控系统服务器数据采集,腾讯天津数据中心机房监控项目
  13. JavaWeb三大组件小结
  14. 华为盒子联网后显示无法连接服务器,【当贝市场】华为盒子连上无线后不能上网怎么办?...
  15. win10未能解析服务器名,win10系统提示“无法解析服务器的dns地址”的修复方法...
  16. 剑风2012年1月要出剧场版了,哇哈哈~~~~~
  17. Android Audio - 支持多个APK同时录音
  18. 五种经典卷积神经网络
  19. 糖果车站的街外小雪初晴
  20. 淘宝开店须知——新手卖家最基础的运营思路

热门文章

  1. 「代码随想录」279.完全平方数 【动态规划】力扣详解!
  2. 「leetcode」406.根据身高重建队列【贪心算法】详解-续集!
  3. 苹果mac强大的截图录像工具:Snagit
  4. inDesign教程,如何创建杂志风标注?
  5. 苹果macPython语言开发环境:PyCharm pro
  6. Microsoft 365 for Mac(原Office 365)
  7. mac下载站,这个可以收藏看看
  8. 如何将Mac“桌面”和“文稿”文件添加到 iCloud 云盘中?
  9. Kite Compositor for Mac基本工具的使用教程
  10. RDS数据订阅服务使用说明