前言

这个minidump对于在windows平台上调试程序问题是十分重要的,所以有必要提一下。

之前我有一个博客说的很详细了,但是因为同事借我的账号乱下载文件,所以直接给注销了。换了一家公司以后,发现他们的程序完全没有Dump检测机制,有点不放心,然后大致搜索,回顾一番了,决定还是再记录一遍。

代码

#include <tchar.h>
#include <shlwapi.h>
#include <dbghelp.h>
#include <Windows.h>
#pragma comment(lib, "Dbghelp.lib")
#pragma comment(lib, "shlwapi.lib")int GenerateMiniDump(PEXCEPTION_POINTERS pExceptionPointers)
{// 定义函数指针typedef BOOL(WINAPI * MiniDumpWriteDumpT)(HANDLE,DWORD,HANDLE,MINIDUMP_TYPE,PMINIDUMP_EXCEPTION_INFORMATION,PMINIDUMP_USER_STREAM_INFORMATION,PMINIDUMP_CALLBACK_INFORMATION);// 从 "DbgHelp.dll" 库中获取 "MiniDumpWriteDump" 函数MiniDumpWriteDumpT pfnMiniDumpWriteDump = NULL;HMODULE hDbgHelp = LoadLibrary(_T("DbgHelp.dll"));if (NULL == hDbgHelp){return EXCEPTION_CONTINUE_EXECUTION;}pfnMiniDumpWriteDump = (MiniDumpWriteDumpT)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");if (NULL == pfnMiniDumpWriteDump){FreeLibrary(hDbgHelp);return EXCEPTION_CONTINUE_EXECUTION;}// 创建 dmp 文件件TCHAR szFileName[MAX_PATH] = { 0 };SYSTEMTIME stLocalTime;GetLocalTime(&stLocalTime);wsprintf(szFileName, L"%04d-%02d-%02d %02d-%02d-%02d.dmp",
stLocalTime.wYear, stLocalTime.wMonth, stLocalTime.wDay,
stLocalTime.wHour, stLocalTime.wMinute, stLocalTime.wSecond);HANDLE hDumpFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ, 0, CREATE_ALWAYS, 0, 0);if (INVALID_HANDLE_VALUE == hDumpFile){FreeLibrary(hDbgHelp);return EXCEPTION_CONTINUE_EXECUTION;}// 写入 dmp 文件MINIDUMP_EXCEPTION_INFORMATION expParam;expParam.ThreadId = GetCurrentThreadId();expParam.ExceptionPointers = pExceptionPointers;expParam.ClientPointers = FALSE;pfnMiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
hDumpFile, MiniDumpWithDataSegs, (pExceptionPointers ? &expParam : NULL), NULL, NULL);// 释放文件CloseHandle(hDumpFile);FreeLibrary(hDbgHelp);return EXCEPTION_EXECUTE_HANDLER;
}LONG WINAPI ExceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo)
{// 这里做一些异常的过滤或提示if (IsDebuggerPresent()){return EXCEPTION_CONTINUE_SEARCH;}return GenerateMiniDump(lpExceptionInfo);
}

在main函数的地方注册一下ExceptionFilter即可:

SetUnhandledExceptionFilter(ExceptionFilter);

注意,dmp文件名千万不要加 : 这个字符,否则会一直停留在dump检测这里,建议还是和编程一样去命名这个文件名。

这种方式对于debug和release版的程序都可以使用,前提是你在编译的时候生成了对应的pdb文件。方法如下:

属性  ->  链接器  ->  调试  ->  生成调试信息  改为  生成调试信息 (/DEBUG) 这样就可以生成pdb文件了

MiniDump - 调试问题的基础相关推荐

  1. Windows驱动开发学习笔记(二)—— 驱动调试内核编程基础

    Windows驱动开发学习笔记(二)-- 驱动调试&内核编程基础 基础知识 驱动调试 PDB(Program Debug Database) WinDbg 加载 PDB 实验:调试 .sys ...

  2. Android逆向之调试smali代码基础

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍Android逆向中调试smali代码的方法." 最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享 ...

  3. Crash -- 生成Minidump调试信息

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

  4. 软件调试之CPU基础

    CPU基础 1. 通用寄存器 32位通用寄存器有8个,分别是EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI. EBP.ESP主要用来维护堆栈,ESP指向栈顶,EBP指向当前栈帧的起始地 ...

  5. Visual Studio调试之断点基础篇

    原文链接地址:http://www.cnblogs.com/killmyday/archive/2009/09/26/1574311.html 我曾经问过很多人,你一般是怎么调试你的程序的? F9, ...

  6. jdb 调试 java_Java逆向基础之JDB动态调试

    JDB在有源代码的时候可以实现调试远程机器上的java程序,但是在逆向中源码很难分析出来,不过还是能够调试得到一部分信息的 本文主要获取两个信息 1.动态调用混淆类中的方法,因为实践过程中我们去手动补 ...

  7. 《Oracle PL/SQL开发指南》学习笔记28——源码调试——PL/SQL基础知识(第六部分)

    控制结构 1. 条件结构 1)if, elsif和else语句 重要概念: 三值逻辑(Three-Valued Logic) Three-valued logic means basically th ...

  8. 调试器工作原理——基础篇

    #include <stdio.h>int main(){printf("Hello, world!n");return 0;} 本文是一系列探究调试器工作原理的文章的 ...

  9. python调试器原理_调试器工作原理——基础篇

    本文是一系列探究调试器工作原理的文章的第一篇.我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起. 关于本文 我打算在这篇文章中介绍关于Linux下的调试器实现的主要 ...

  10. 调试器工作原理系列一: 基础篇

    调试器工作原理系列一: 基础篇 本文是一系列探究调试器工作原理的文章的第一篇.我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起. 关于本文 我打算在这篇文章中介绍关 ...

最新文章

  1. memset初始化内存
  2. Java 对synchronized的补充Lock锁
  3. Java中的异常和递归
  4. iPhoneX-关于底部的那个一个横条的问题
  5. 雅特力415开发资料_雅特力在车用电子领域 AT32 MCU应用于ADAS环视系统
  6. win10 右键 命令行
  7. 洛谷 P2184 贪婪大陆 解题报告
  8. react设置默认props
  9. 如何对SAP Spartacus支持路由的Component进行单元测试
  10. leetcode 234. 回文链表(快慢指针+链表倒置)
  11. 剪切文件_转录组测序技术和结果解读(十六)——可变剪切
  12. Python os模块文件操作(二)
  13. 树莓派竟出微控制器了!Raspberry Pi Pico 只需 4 美元!
  14. 计算机工程师专用小工具,204个联想工程师专用小工具合集
  15. linux常用下载工具
  16. 自然语言处理之语料库
  17. 麦克林排名计算机,麦克林9大热门大学专业院校排名出炉!启德为您解读
  18. Affymetrix SNP6.0芯片分析
  19. cass简码大全_cass简码实体对照表
  20. 前端在线微信扫码支付的小功能

热门文章

  1. Delft3D建模、水动力模拟方法及在地表水环境影响评价丨Delft3D标量输运、波浪、拉格朗日粒子及溢油模型
  2. LaTeX 有哪些「新手须知」的内容?
  3. 2019会考计算机知识点,2019-2020年高中信息技术高一会考总复习理论知识点汇总整理...
  4. NLP数据标注工具调研
  5. php汉字转换拼音插件,汉字转换拼音的PHP库
  6. 中国伺服电机市场现状调查与投资战略分析报告2022-2028年
  7. 解扩matlab,(完整版)BPSK调制的MATLAB仿真
  8. 大众点评App的短视频耗电量优化实战
  9. android 红外遥控程序,Android 红外遥控器适配
  10. 三角网导线平差实例_三角网条件平差计算