VS2008 dump

 1 #include <DbgHelp.h>
 2 #include <stdlib.h>
 3 #pragma comment(lib, "dbghelp.lib")
 4
 5 BOOL IsDataSectionNeeded(const WCHAR* pModuleName)
 6 {
 7     if(pModuleName == 0)
 8     {
 9         return FALSE;
10     }
11
12     WCHAR szFileName[_MAX_FNAME] = L"";
13     _wsplitpath(pModuleName, NULL, NULL, szFileName, NULL);
14     if(wcsicmp(szFileName, L"ntdll") == 0)
15         return TRUE;
16
17     return FALSE;
18 }
19
20 BOOL CALLBACK MiniDumpCallback(PVOID
21                                pParam,const PMINIDUMP_CALLBACK_INPUT   pInput,
22                                PMINIDUMP_CALLBACK_OUTPUT        pOutput)
23 {
24     if(pInput == 0 || pOutput == 0)
25         return FALSE;
26
27     switch(pInput->CallbackType)
28     {
29     case ModuleCallback:
30         if(pOutput->ModuleWriteFlags & ModuleWriteDataSeg)
31             if(!IsDataSectionNeeded(pInput->Module.FullPath))
32                 pOutput->ModuleWriteFlags &= (~ModuleWriteDataSeg);
33     case IncludeModuleCallback:
34     case IncludeThreadCallback:
35     case ThreadCallback:
36     case ThreadExCallback:
37         return TRUE;
38     default:;
39     }
40
41     return FALSE;
42 }
43
44 LONG __stdcall AppUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo)
45 {
46     // create dump file
50     TCHAR szPath[MAX_PATH] = {0};
51     ::GetModuleFileName(NULL, szPath, MAX_PATH);
52     CString strPath(szPath);
53     strPath = strPath.Mid(0, strPath.ReverseFind(_T(‘\\‘))+1);
54     strPath += _T("myApp.dmp");
55
56     HANDLE hFile = CreateFile(strPath, GENERIC_READ | GENERIC_WRITE,
57         FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
58
59     if((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
60     {
61         MINIDUMP_EXCEPTION_INFORMATION mdei;
62         mdei.ThreadId           = GetCurrentThreadId();
63         mdei.ExceptionPointers  = pExceptionInfo;
64         mdei.ClientPointers     = NULL;
65
66         MINIDUMP_CALLBACK_INFORMATION mci;
67         mci.CallbackRoutine     = (MINIDUMP_CALLBACK_ROUTINE)MiniDumpCallback;
68         mci.CallbackParam       = 0;
69
70         ::MiniDumpWriteDump(::GetCurrentProcess(), ::GetCurrentProcessId(), hFile, MiniDumpNormal, (pExceptionInfo != 0) ? &mdei : 0, NULL, &mci);
71         CloseHandle(hFile);
72     }
73
74     return EXCEPTION_EXECUTE_HANDLER;
75 }
76
77 void StartUnhandledExceptionFilter()
78 {
79     ::SetUnhandledExceptionFilter(AppUnhandledExceptionFilter);
80 }
时间: 2024-10-25 07:15:50

VS2008 dump的相关文章

vs2008与windbg的使用

WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件.使用windgb进行程序调试是一个很有必要的技能.WinDbg调试,离不开dump文件.以下是如何在VS中生成dump和WinDbg的入门. VS2008调试dump文件 http://blog.csdn.net/chenyujing1234/article/details/9357033 VS2008调试Release程序--Dump文件方式 h

让程序在崩溃时体面的退出之Dump文件

在我的那篇<让程序在崩溃时体面的退出之CallStack>中提供了一个在程序崩溃时得到CallStack的方法.但是要想得到CallStack,必须有pdb文件的支持.但是普通情况下,公布出去的程序都是Release版本号的,都不会附带pdb文件.那么我们怎么能在程序崩溃的时候找到出错的详细位置呢?这个时候就该Dump文件出场了!Dump文件是进程的内存镜像,能够把程序执行时的状态完整的保存下来.         要想在程序崩溃的时候创建Dump文件,就须要用到DbgHelp.dll中Wind

VS2008快捷键_大全

Ctrl+B,C: 清除全部标签 Ctrl+I: 渐进式搜索 Ctrl+Shift+I: 反向渐进式搜索 Ctrl+F: 查找 Ctrl+Shift+F: 在文件中查找 F3: 查找下一个 Shift+F3: 查找上一个 Ctrl+H: 替换 Ctrl+Shift+H: 在文件中替换 Alt+F12: 查找符号 ( 列出所有查找结果 ) Ctrl+Shift+V: 剪贴板循环 Ctrl+ 左右箭头键 : 一次可以移动一个单词 Ctrl+ 上下箭头键 : 滚动代码屏幕,但不移动光标位置. Ctrl

Dump文件的生成和使用

1 简介 第一次遇到程序崩溃的问题,之前为单位开发了一个插件程序,在本机运行没有出现问题,但把生成的可执行文件拷贝到服务器上一运行程序,刚进入插件代码,插件服务就崩溃了,当时被这个问题整的很惨,在同事的帮助下了解到,对于程序崩溃,最快的解决方式是生成dump文件,通过生成dump文件使用调试工具进行调试,还原程序崩溃时的状态,能够起到快速定位排查问题的作用.Dump文件是进程的内存镜像.可以把程序的执行状态通过调试器保存到dump文件中.Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种

21.dubbo脚本之dump.sh

#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` cd .. DEPLOY_DIR=`pwd` CONF_DIR=$DEPLOY_DIR/conf SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'` LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties |

cocos2d-x 安卓 ios崩溃dump

在安卓和ios平台上可通过信号处理方式,在崩溃时打印Lua堆栈信息,方便分析bug static void dumpHandler(int cause, siginfo_t * info, void *uap) { CCLOG("Crash dump:"); CCLuaEngine* pEngine = CCLuaEngine::defaultEngine(); me_traceStack(pEngine->getLuaStack()->getLuaState()); ex

VS2008 工程中部分文件不参与编译 从生成中排除【Worldsing笔记】

Visual Studio 2008 .VS2008.VC2008工程源文件配置.编译配置 ? 有时编写代码时,往往存在这样的需求(或是希望有这样的功能):一个工程经过不共同的配置实现不同的版本或是功能,比如做开发包的Dome,一个库文件, 有多个API接口,以lib文件给用户提供时,我们需要提供文档和Demo,你可以一个Demo建立一个工程,但是,像VS2008这样的高级开发工具应该有解决 办法的,关键是你不知道怎么用,在VS2008环境下有这样几种解决办法: ? 建立一个工作区,在工作区里建

Lua2.4 保存字节码 dump.c

严格意义上说,把 dump 这部分叫保存字节码并不准确.因为除了保存 TFunc 里的字节码 code 之外,还保存了其它的内容.比如函数头,字节序及字节码需要的数据等.所以,准确的说应该叫保存字节码及环境,或者叫做保存世界,就是字节码生成之后的运行时相关信息也保存了下来.可以从保存下来的这些信息恢复出字节码执行时需要的运行时,默认的保存文件就是之前所说的那个 luac.out 的二进制文件.咬文嚼字一下,dump 这里翻译为保存意思应该差不多,undump 则是它的相反操作,可以叫做恢复.du

vs2008中使用gdi+的设置

vs2008中使用gdi+ 1.新建一个mfc工程 2.在stdafx.h文件中加入以下几行语句:#include <gdiplus.h>                //#pragma comment(lib, "gdiplus.lib") //在工程属性中添加亦可using namespace Gdiplus;            //使用GDI+的命名空间, 若不用的话每次使用Gdiplus时均加上命名空间亦可 3.修改App类在App类(以下例子中为CTestA