程序dmp文件生成

 1 #pragma once
 2 #include <windows.h>
 3 #include <imagehlp.h>
 4 #include <stdlib.h>
 5 #include <iostream>
 6 #pragma comment(lib, "dbghelp.lib")
 7
 8
 9 inline BOOL IsDataSectionNeeded(const WCHAR* pModuleName)
10
11 {
12   if(pModuleName == 0)
13   {
14        return FALSE;
15   }
16
17   WCHAR szFileName[_MAX_FNAME] = L"";
18   _wsplitpath(pModuleName, NULL, NULL, szFileName, NULL);
19
20   if(wcsicmp(szFileName, L"ntdll") == 0)
21        return TRUE;
22   return FALSE;
23 }
24
25
26
27 inline BOOL CALLBACK MiniDumpCallback(PVOID   pParam,const PMINIDUMP_CALLBACK_INPUT pInput,PMINIDUMP_CALLBACK_OUTPUT  pOutput)
28
29 {
30   if(pInput == 0 || pOutput == 0)
31        return FALSE;
32
33   switch(pInput->CallbackType)
34   {
35   case ModuleCallback:
36        if(pOutput->ModuleWriteFlags & ModuleWriteDataSeg)
37             if(!IsDataSectionNeeded(pInput->Module.FullPath))
38                 pOutput->ModuleWriteFlags &= (~ModuleWriteDataSeg);
39   case IncludeModuleCallback:
40   case IncludeThreadCallback:
41   case ThreadCallback:
42   case ThreadExCallback:
43        return TRUE;
44   default:;
45   }
46   return FALSE;
47 }
48
49
50
51 inline void CreateMiniDump(EXCEPTION_POINTERS* pep, LPCTSTR strFileName)
52 {
53   HANDLE hFile = CreateFile(strFileName, GENERIC_READ | GENERIC_WRITE,
54        0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
55
56   if((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
57   {
58        MINIDUMP_EXCEPTION_INFORMATION mdei;
59        mdei.ThreadId           = GetCurrentThreadId();
60        mdei.ExceptionPointers  = pep;
61        mdei.ClientPointers     = FALSE;
62        MINIDUMP_CALLBACK_INFORMATION mci;
63        mci.CallbackRoutine     = (MINIDUMP_CALLBACK_ROUTINE)MiniDumpCallback;
64        mci.CallbackParam       = 0;
65        MINIDUMP_TYPE mdt = (MINIDUMP_TYPE)(MiniDumpWithPrivateReadWriteMemory |
66             MiniDumpWithDataSegs |
67             MiniDumpWithHandleData |
68             0x00000800 /*MiniDumpWithFullMemoryInfo*/ |
69             0x00001000 /*MiniDumpWithThreadInfo*/ |
70             MiniDumpWithUnloadedModules);
71        MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),
72             hFile, mdt, (pep != 0) ? &mdei : 0, 0, &mci);
73        CloseHandle(hFile);
74   }
75 }
新建一个头文件将上面内容粘贴到文件中
 1 std::ostream& operator<<(std::ostream& os, const EXCEPTION_RECORD& red)
 2 {
 3     return os << "   Thread ID:" << GetCurrentThreadId()
 4         << "   ExceptionCode: " << red.ExceptionCode << "\n"
 5         << "   ExceptionFlags: " << red.ExceptionFlags << "\n"
 6         << "   ExceptionAddress: " << red.ExceptionAddress << "\n"
 7         << "   NumberParameters: " << red.NumberParameters;
 8 }
 9 LONG WINAPI GPTUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
10 {
11     //保存现场文件
12     CreateMiniDump(pExceptionInfo, "testdmp.dmp");
13     cerr<<"未知错误:"<<(*pExceptionInfo->ExceptionRecord)<<endl;
14     exit(pExceptionInfo->ExceptionRecord->ExceptionCode);
15     return EXCEPTION_EXECUTE_HANDLER;    // 程序停止运行
16 }

添加上面内容到cpp文件中

//注册生成dmp文件函数 此代码应放在可能出现异常代码前面
SetUnhandledExceptionFilter(GPTUnhandledExceptionFilter);

时间: 2024-08-02 19:05:34

程序dmp文件生成的相关文章

【exp/imp】将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中

[exp/imp]将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 如何将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中(重点,2种方法)? ② 从dmp文件可以获取到哪些信息?如何从dmp文件获取到dmp文件的字符集(重点,N种方法)? ③ 如何从dmp

转-【exp/imp】将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中

原帖地址:http://blog.csdn.net/lihuarongaini/article/details/71512116 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 如何将US7ASCII字符集的dmp文件导入到ZHS16GBK字符集的数据库中(重点,2种方法)? ② 从dmp文件可以获取到哪些信息?如何从dmp文件获取到dmp文件的字符集(重点,N种方法)? ③ 如何从

DMP文件的生成和使用

1.生成dmp的程序 #include  <dbghelp.h> #pragma comment(lib,  "dbghelp.lib")//设置异常处理回调函数SetUnhandledExceptionFilter(UnhandledExceptionFilter);//异常处理代码//EXCEPTION_EXECUTE_HANDLER equ 1 表示我已经处理了异常,可以优雅地结束了 //EXCEPTION_CONTINUE_SEARCH equ 0 表示我不处理,其

C# 程序自动批量生成 google maps 的KML文件

原文:C# 程序自动批量生成 google maps 的KML文件 google maps 的 KML 文件可以用于静态的地图标注,在某些应用中,我们手上往往有成百上千个地址,我们需要把这些地址和描述批量标注到 google maps 上去,如果手工来做,太耗时间,在这里我写了一个程序批量来生成这个 KML 文件. 首先看一下 KML 文件的格式: <?xml version="1.0" encoding="UTF-8"?> <kml xmlns=

.Net 监控文件夹是否有新文件生成,并确认文件没有被其他程序占用

监控文件夹测试程序: 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 using System.Threading; 7 using System.Threading.Tasks; 8 9 namespace FileSystemWatcherTest 10 { 11 class Program 12 { 13 st

WinDbg分析DMP文件方法完全攻略

前言:在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试.在开发人员测试出现的bug,我们可以直接在本地进行调试.如果测试人员测试出崩溃级别的bug,如果我们需要调试往往借助于vs提供的Remote Debugger工具进行远程调试(关于vs2010远程调试的方法,请参考http://blog.sina.com.cn/s/blog_a459dcf5010153o7.html),然是当程序在用户手中出现崩溃此时我们可以采用Remote Debugg

Dump 文件生成与分析

近期两天因为项目的须要,研究了一下Dump文件相关的知识,今天做一个小节(因为研究不久而且第一次写blog,希望网友们看到不要见笑). Dump文件是进程的内存镜像.能够把程序的运行状态通过调试器保存到dump文件里.   Dump文件是用来给驱动程序编写人员调试驱动程序用的,这样的文件必须用专用工具软件打开,比方使用WinDbg打开. 当我们的程序公布出去之后,在客户机上是无法跟踪自己代码的bug的,所以Dump(扩展名是 .dmp)文件对于我们来说特别实用.我们能够通过.dmp文件把出现bu

iOS程序发布测试-生成ad hoc证书

转自: http://blog.sina.com.cn/s/blog_68444e230100srdn.html iOS程序发布测试3-生成ad hoc证书 iOS证书分2种,1种是开发证书,用来给你(开发人员)做真机测试的:1种是发布证书,发布证书又分发布到app store的(这里不提及)和发布测试的ad hoc证书. 那ad hoc证书和开发证书区别在哪里?如果你的tester(团队测试人员.客户)都能将测试设备拿到你面前,直接插到你的mac开发机上,你可以直接将程序"灌"进去,

通过ccb(CocosBuilder)文件生成cocos2dx代码

在C++下使用ccb,绑定调用,成员变量,让人头疼又容易犯错. 自己用pythong写了个小程序,通过ccb文件直接生成C++代码 python我用的不多,又是随性所做,代码质量就很差,大家多多包容吧. 一共包括三个文件,codeGen.py, myCommon.py ,genCpp.py 运行codeGen.py. myCommon.py中包括一些配置信息,根据具体项目自己修改 class projectinfo: def __init__(self): self.projectName='F