在主程序初始化时加入

DeclareDumpFile();

创建头文件DumpFile.h, 将下列代码放进文件中

#pragma once

#include

#include < Dbghelp.h>

#include

#include

using namespace std;

#pragma comment(lib, "Dbghelp.lib")

namespace NSDumpFile

{

void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException)

{

// 创建Dump文件

//

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);

}

LPTOP_LEVEL_EXCEPTION_FILTER WINAPI MyDummySetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter)

{

return NULL;

}

BOOL PreventSetUnhandledExceptionFilter()

{

HMODULE hKernel32 = LoadLibrary(_T("kernel32.dll"));

if (hKernel32 == NULL)

return FALSE;

void *pOrgEntry = GetProcAddress(hKernel32, "SetUnhandledExceptionFilter");

if(pOrgEntry == NULL)

return FALSE;

unsigned char newJump[ 100 ];

DWORD dwOrgEntryAddr = (DWORD) pOrgEntry;

dwOrgEntryAddr += 5; // add 5 for 5 op-codes for jmp far

void *pNewFunc = &MyDummySetUnhandledExceptionFilter;

DWORD dwNewEntryAddr = (DWORD) pNewFunc;

DWORD dwRelativeAddr = dwNewEntryAddr - dwOrgEntryAddr;

newJump[ 0 ] = 0xE9; // JMP absolute

memcpy(&newJump[ 1 ], &dwRelativeAddr, sizeof(pNewFunc));

SIZE_T bytesWritten;

BOOL bRet = WriteProcessMemory(GetCurrentProcess(), pOrgEntry, newJump, sizeof(pNewFunc) + 1, &bytesWritten);

return bRet;

}

LONG WINAPI UnhandledExceptionFilterEx(struct _EXCEPTION_POINTERS *pException)

{

TCHAR szMbsFile[MAX_PATH] = { 0 };

::GetModuleFileName(NULL, szMbsFile, MAX_PATH);

TCHAR* pFind = _tcsrchr(szMbsFile, '\\');

if(pFind)

{

*(pFind+1) = 0;

_tcscat(szMbsFile, _T("CrashDumpFile.dmp")); //此处报Warning可以转成CString

CreateDumpFile(szMbsFile, pException);

}

// TODO: MiniDumpWriteDump

//FatalAppExit(-1, _T("Fatal Error"));

return EXCEPTION_CONTINUE_SEARCH;

}

void RunCrashHandler()

{

SetUnhandledExceptionFilter(UnhandledExceptionFilterEx);

//PreventSetUnhandledExceptionFilter(); //放天Release版不会生成,具体原因不知

}

};

#define DeclareDumpFile() NSDumpFile::RunCrashHandler();

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

  1. 我的java安装老是报错_我的世界总是崩溃怎么办

    我的世界总是崩溃怎么办?我的世界作为许多玩家都十分喜爱的模拟经营沙盘类游戏,经常有玩家反映在玩我的世界的时候,游戏总是会出现崩溃或者无法启动的情况,那么如何解决呢? Minecraft 无法正常启动. ...

  2. 用java做小学数学系统_基于jsp的小学数学试卷生成-JavaEE实现小学数学试卷生成 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的小学数学试卷生成, 该项目可用各类java课程设计大作业中, 小学数学试卷生成的系统架构分为前后台两部分, 最终实 ...

  3. java 读取excel2007 内存不足_内存不足错误 – 写入Excel时的Java堆空间

    我有近100,000条记录的数据,我正在尝试使用XSSFWorkbook通过 Java代码将数据写入.xlsx文件.我能够将数据库中的所有数据提取到ArrayList.通过迭代ArryList,我将数 ...

  4. mqtt与硬件交互_一个关于小程序Iot的具体实现(MQTT版)

    原标题:一个关于小程序Iot的具体实现(MQTT版) Iot,这个名词应该很多人都听过了吧,即大数据.Ai等兴起后也紧跟着研发大潮流的到来,即物联网.传统简单的说就是智能化.程序化的控制硬件设施,大家 ...

  5. java动作监听退出程序_监听获取程序退出事件(Linux、Windows、Java、C++)

    监听程序退出事件,主要是用于程序的优雅退出. 下面针对Java.C++在Windows.Linux下的处理分别进行介绍. 1.Java监听程序退出事件 Java本身是跨平台的,不必关系Windows还 ...

  6. html 循环_一个不被程序员认为是编程语言的语言——HTML,你怎么看?

    HTML究竟算不算是一门编程语言,这是争执已久的话题.其实,从本质来讲,HTML确实算不上是一门编程语言. HTML全称,HyperText Markup Language.字面理解,HTML就是一种 ...

  7. java如何使用水晶报表_在Windows应用程序中使用水晶报表的方法

    在Windows应用程序中使用水晶报表的方法 举例说明: (1)创建一个Windows应用程序,选择[解决方案资源管理器] à[添加新项]à[crystal report],输入报表名Reportl. ...

  8. java拼图自动还原算法_自动解决智能拼图,A*算法+生成可解拼图(C++)

    [实例简介] 自动生成可解拼图问题,并用A*算法给出自动完成的步骤..另外还有暴力搜索的代码 [实例截图] [核心代码] pingtukejie └── pingtukejie ├── Release ...

  9. java模拟器apk闪退_急,求帮助,eclipse生成apk安装以后闪退

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 本人小白,从网上找了一段代码,粘贴到android eclipse,按着eclipse提示的错误,自动把错误改了一下,不过也就是改了改activity名字 ...

最新文章

  1. λ-矩阵(λ-矩阵在初等变换下的标准形)
  2. python中文件读写问题及解决方法
  3. [css] css中兼容ie浏览器的前缀是什么?
  4. 清华计算机本科待遇,2021年清华大学报考信息出炉 计算机专业最吃香
  5. 深入浅出话VC++(2)——MFC的本质
  6. react动态改变选中不选中_reactjs – 如何避免使用重新选择来计算派生状态时React重新渲染...
  7. 蓝桥杯 ADV-147 算法提高 学霸的迷宫
  8. 设计模式之GOF23状态模式
  9. AS4950全桥(H桥)直流有刷电机驱动 2相4线步进电机驱动 替代L298N【附开源设计资料】
  10. 《硅谷之谜》读书笔记
  11. 整体资产评估需要资料清单
  12. 如何使用python调用ads接口(版图仿真)
  13. 自动驾驶芯片之——FPGA和ASIC介绍
  14. ubuntu更改文件夹权限
  15. 数字华容道有解的条件
  16. 【学习周报】深度学习笔记第六周
  17. CVE-2012-0003:Microsoft Windows Media Player winmm.dll MIDI 文件堆溢出漏洞调试分析
  18. 【SQL开发实战技巧】系列(十四):计算消费后的余额计算银行流水累计和计算各部门工资排名前三位的员工
  19. 2021年度全国地区绩效调研报告
  20. Python 入门知识1

热门文章

  1. 双绞线、同轴电缆和光纤电缆的区别
  2. B2B专线宽带业务成为企业上云新战场——Vecloud
  3. 广域网一般采用什么网络拓扑结构?—Vecloud
  4. 在Win7上安装WINDRIVER.TORNADO.V2.2.FOR.PENTIUM与运行HelloWorld
  5. CCF - 201509-2 - 日期计算
  6. MySql 中的常见问题解决方法
  7. 使用TreadPool时的ThreadLocal示例
  8. Java web程序中备份oracle数据库
  9. Linux 常见命令
  10. 119.CSMA/CD