主函数:

#include "stdafx.h"
#include "DumpFile.h"

int _tmain(int argc, _TCHAR* argv[])
{
    //SetUnhandledExceptionFilter();
    DeclareDumpFile();

int aTemp = 1;
    aTemp++;
    int *p = NULL;
    *p=1;
    return 0;
}

DumpFile.h文件

#pragma once
#include <windows.h>
#include < Dbghelp.h>
#include <iostream>  
#include <vector>  
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)
    {
        //MessageBox(NULL, _T("Stop"), _T("Tip"), MB_OK);
        TCHAR szMbsFile[MAX_PATH] = { 0 };
        ::GetModuleFileName(NULL, szMbsFile, MAX_PATH);
        TCHAR* pFind = _tcsrchr(szMbsFile, '\\');
        if(pFind)
        {
            *(pFind+1) = 0;
            _tcscat(szMbsFile, _T("CrashDumpFile.dmp"));
            CreateDumpFile(szMbsFile, pException);
        }

// TODO: MiniDumpWriteDump
        FatalAppExit(-1,  _T("Fatal Error"));
        return EXCEPTION_CONTINUE_SEARCH;
    }

void RunCrashHandler()
    {
        SetUnhandledExceptionFilter(UnhandledExceptionFilterEx);
        PreventSetUnhandledExceptionFilter();
    }
};

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

dump文件调试技巧(产生Dump文件)相关推荐

  1. PDF文件编辑技巧之PDF文件去除水印方法

    PDF文件相信大家都会使用到,有时候我们不止局限于使用PDF文件还需要编辑PDF文件的时候,那么PDF文件的编辑技巧有什么呢.总所周知PDF文件的编辑是需要PDF编辑器的,编辑器的使用技巧有什么呢,好 ...

  2. VLC打不开视频文件调试技巧

    用VLC打开TS文件,如果只有视频流的话可以打开,添加进了SRT字幕,打开失败!(暴风.QQ影音.KMPlayer都可以正常打开) 查询原因:下面是一个VLC自带的查询功能 或按快捷键Ctrl+M 打 ...

  3. centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

    写个demo来玩一玩linux平台下使用lldb加载sos来调试netcore应用. 当然,在真实的产线环境中需要分析的数据和难度远远高于demo所示,所以demo的作用也仅仅只能起到介绍工具的作用. ...

  4. vs2008调试c语言,VS2008调试Release程序-Dump文件方式_C/C++技术分享_看流星社区 www.kanliuxing.com...

    在Windows平台下用C++开发应用程序,最不想见到的情况恐怕就是程序崩溃,而要想解决引起问题的bug,最困难的应该就是调试release版本了.因为release版本来就少了很多调试信息,更何况一 ...

  5. vs2008 dump文件调试

    引自  南海之星 用vs2008分析dump文件 双击minidump文件(*.dmp).默认会启动vs2008. 菜单Tools/Options, Debugging/Symbols,增加PDB文件 ...

  6. DUMP文件分析1:DUMP文件简介

    1.1 DUMP文件类型 Windows下Dump文件分为两大类,内核模式Dump和用户模式Dump.内核模式Dump是操作系统创建的崩溃转储,最经典的就是系统蓝屏,这时候会自动创建内核模式的Dump ...

  7. sublime text3 保存文件时候名字后缀.dump问题解决

    sublime text3 保存文件时候名字后缀.dump问题解决 参考文章: (1)sublime text3 保存文件时候名字后缀.dump问题解决 (2)https://www.cnblogs. ...

  8. oracle dump 文件解析,Oracle 常用的dump(Memory Dumps/File Dumps/Trace 文件使用示例)

    一.Memory Dumps 1).Global Area ALTER SESSION SET EVENTS 'immediate trace name global_area level n'; 1 ...

  9. Visual Studio开发工具----调试技巧-转储文件

    3.10 转储文件 3.10.1 概述        转储文件是一个快照,它显示正在执行的进程和某个时刻为应用程序加载的模块.转储文件带有堆信息的转储还包括应用程序在该点的内存快照.        在 ...

最新文章

  1. 数学分析高等代数考研试题荟萃[更新至2017年10月1日]
  2. 如何在python中显示电脑中的图片-python如何实现多个图片显示在屏幕上?
  3. 通过工具SecureCRTPortable将项目部署到服务器上
  4. Linux下安装部署ElasticSearch教程【7.10.1】
  5. springboot yml怎么建常量_Springboot中加载自定义的yml配置文件
  6. css3怎么设置logo,纯CSS3实现的LOGO标志 ABN AMRO CSS3 logo
  7. mysql 单表字段多少合适_复制信息记录表|全方位认识 mysql 系统库
  8. Raft协议安全性保证
  9. Web完整渗透测试实例(windows)
  10. 再有人问你为什么MySQL用B+树做索引,就把这篇文章发给她
  11. 观点 | 云原生时代来袭 下一代云数据库技术将走向何方?...
  12. c语言实现--单向循环链表操作
  13. win7安装PS2019CC启动时报d3dcompiler_47.dll的问题解决
  14. python 计算众数、中位数、分位数、偏度、峰度
  15. DGL系列之(二):使用DGL实现GCN
  16. 如何通过低代码平台搭建以“督办”为中心的办公管理系统
  17. K-th Largest Value
  18. 月饼事件技术还原 - 用js+Chorme来做抢电商的东西吧
  19. Nginx源码安装及调优配置(二)
  20. 复旦大学高等代数学习指导书(白皮书)的评价

热门文章

  1. 北航2022软件工程第二次作业——产品评测、分析与规划
  2. lda 可以处理中文_自然语言处理——使用词向量(腾讯词向量)
  3. 计统大作业Hello P2P
  4. 【Paper Reading】二值化网络——BNN
  5. Google Chrome 中的高性能网络
  6. 国产安卓和原生android,定制安卓和原生Android到底有哪些不同?真相了!
  7. opencv以图片名称为索引顺序读取多张图片
  8. 实时网速监测app_实时网速app下载-实时网速下载1.0.0安卓版-西西软件下载
  9. 怎么文字扫描识别?看完这篇你就会了
  10. 用opencv实现两张半透明png图片以一定透明度叠加