自己创建 minidump

news/2024/11/24 11:35:19/


以前曾写过一个 bugslayer.dll 的介绍. 在程序出错时将调用栈写到文件. 觉得不错. 后来开始用 windbg. 知道了 userdump. 知道了如何调试 dump... 才知道程序崩溃的时候写 dump 文件其实可以获取比调用栈多得多的信息. 

如果你的程序什么都不干. 那么在程序出错的时候. drwtsn32.exe 会写一个 userdump. 但 drwtsn32 有些缺点. 比如只能写一个 dump 文件. 后面的崩溃写 dump 文件时会覆盖前面的. win2000 下的 drwtsn32 只能写旧式的 dump 文件(往往尺寸比较大). 有一篇文章论述的比较清楚:
 http://www.debuginfo.com/articles/ntsdwatson.html

建议使用 ntsd 代替 drwtsn32. 但 ntsd 的缺点就是需要安装最新的 windbg. 这是一个硬伤. 在看了 debuginfo.com 的另一篇文章:
 http://www.debuginfo.com/articles/effminidumps.html
 
之后, 我选择的是在程序出错的时候调用 api 自己写 minidump. 克服了 drwtsn32, ntsd 的缺点.
将封装好的函数放到了一个头文件中, 包含即可. 使用的方法很简单:

#include <windows.h>
#include "minidump.h"
LONG __stdcall MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
{
 CreateMiniDump(pExceptionInfo, "c://user.dmp");
 return EXCEPTION_EXECUTE_HANDLER;
}

void main()
{
 SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
 *(int*)0=0; // AV
}

这样就好了. 注意安装至少 xp 以上的 sdk.
这里用到了一个 api SetUnhandledExceptionFilter(), 如果不明白可以搜一下 msdn.
运行例子程序出错退出之后, 就得到了 c://user.dmp. 可以用 windbg 等调试器来分析了.  

代码从这里下载 http://nicoster.googlepages.com/minidump.rar


http://www.ppmy.cn/news/574806.html

相关文章

MiniDump不生成或者生成0字节

今天在使用C写一个Windows多线程程序时&#xff0c;发现退出过程中有段错误&#xff0c;为了方便快速的定位问题&#xff0c;我使用了MiniDump。 MiniDump.c源码如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <time.h> #include <…

MiniDump文件的生成(一)

使用DbgHelp提供的MiniDumpWriteDump函数可以在程序崩溃的时候产生包含足够多信息的MiniDump文件供调试程序使用。 1. MiniDumpWriteDump的声明如下 详见: http://msdn.microsoft.com/en-us/library/windows/desktop/ms680360(vvs.85).aspx 2. 作为示例&#xff0c;下面…

用windbg分析蓝屏文件minidump随记!!

用windbg分析蓝屏文件minidump&#xff0c;以解决加载驱动蓝屏的相关问题随记。 案例1&#xff1a;能够正常进入操作系统&#xff0c;按照如下提示设置: a. 右击“我的电脑”选择“属性”; b. 在弹出的对话框中选择 “高级”&#xff0d;> “设置”; c.“自动重新启动…

MINIDUMP_TYPE详解

MINIDUMP_TYPE 枚举类型详解 一、MINIDUMP_TYPE 的作用 相信大家都知道我们可以使用minidump文件来记录Windows程序崩溃时的信息&#xff0c;其是一种内存转储&#xff0c;其第一代原型是一种“全用户转储&#xff08;Full User Dump&#xff09;”,里面包含了全部的进程内存信…

【小沐学C++】C++ 捕获程序异常奔溃minidump

文章目录 1、简介1.1 MiniDumpWriteDump函数1.2 Visual Studio分析小型转储1.3 使用 Microsoft 公共符号服务器1.4 使用 WinDbg 调试小型转储 2、代码实现2.1 例子一2.2 例子二2.3 例子三2.4 例子四2.5 其他例子 3、调试工具3.1 windbg3.2 debugdiag3.3 Visual Studio 结语 1、…

Minidump方式保留程序崩溃现场

介绍部分转自https://www.cnblogs.com/lisuyun/p/5245609.html 程序部分为原创。 Minidump方式保留程序崩溃现场 在Windows平台下用C开发应用程序&#xff0c;最不想见到的情况恐怕就是程序崩溃&#xff0c;而要想解决引起问题的bug&#xff0c;最困难的应该就是调试release版…

MiniDump文件的生成(二)

在《MiniDump文件生成&#xff08;一&#xff09;》中简单的介绍了一下怎样在程序崩溃的时候生成供调试使用的DMP文件&#xff0c;本文将详细的介绍一下MINIDUMP_TYPE中的每一种类型以及针对每一种类型所生成的DMP文件中将包含哪些特定信息。 首先来看一下&#xff0c;Windows…

写入的dump文件为0kb (1、MiniDumpWriteDump 简单理解)

1、了解下MiniDumpWriteDump MiniDumpWriteDump (vs2008) MSDN ImageHlp.h 文件 // …… 4647-4657BOOL WINAPI MiniDumpWriteDump(IN HANDLE hProcess,IN DWORD ProcessId,IN HANDLE hFile,IN MINIDUMP_TYPE DumpType,IN CONST PMINIDUMP_EXCEPTION_INFORMATION Excepti…