如何在程序异常或者崩溃时产生一个dump文件
2015-01-07 11:39
501 查看
核心API是:
CreateFile()
MinDumpWriteDump()
需要包含头文件:
#include <DbgHelp.h>
#pragma comment(lib, "dbghelp.lib")
代码如下:
CreateFile()
MinDumpWriteDump()
需要包含头文件:
#include <DbgHelp.h>
#pragma comment(lib, "dbghelp.lib")
代码如下:
// test_dump.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdlib.h> #include <string> #include <Windows.h> #include <DbgHelp.h> #pragma comment(lib, "dbghelp.lib") #define _CRT_SECURE_NO_WARNINGS LONG WINAPI MyCustomUnhandledFilter(struct _EXCEPTION_POINTERS *lpExceptionInfo) { LONG iRet = EXCEPTION_EXECUTE_HANDLER; TCHAR szDumpFileName[MAX_PATH] = {0}; SYSTEMTIME st = {0}; GetLocalTime(&st); wsprintf(szDumpFileName, _T("%04d-%02d-%02d-%02d-%02d-%02d.dmp"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wMinute); HANDLE hDumpFile = CreateFile(szDumpFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hDumpFile == INVALID_HANDLE_VALUE) { DWORD dwErrorID = GetLastError(); printf("Failed to create dump file, error ID: %d\n", dwErrorID); return iRet; } MINIDUMP_EXCEPTION_INFORMATION MindumpExceptionInfo = {0}; MindumpExceptionInfo.ThreadId = GetCurrentThreadId(); MindumpExceptionInfo.ExceptionPointers = lpExceptionInfo; MindumpExceptionInfo.ClientPointers = FALSE; BOOL bRet = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &MindumpExceptionInfo, NULL, NULL); if(bRet) { printf("Succeeded to create dump file!\n"); } else { printf("Failed to create dump file!\n"); } CloseHandle(hDumpFile); return iRet; } void crash(void) { int i = 1; int j = 0; //!!程序崩溃的地方 i /= j; } int _tmain(int argc, _TCHAR* argv[]) { SetUnhandledExceptionFilter(MyCustomUnhandledFilter); char buf[10]; memset(buf, 0, sizeof(buf)*sizeof(char)); crash(); strcpy_s(buf, "123456789"); MessageBox(NULL, _T("程序出错了吗?"), _T(""), MB_OK); system("pause"); return 0; }
相关文章推荐
- 一个宏命令,就可以程序崩溃时生成dump文件
- Android当Sqlite 增加字段或者减少字段时如何不让程序崩溃。
- IOS错误异常一个未知的实例在运行,出现程序崩溃
- 如何防止后台线程抛出的异常让程序崩溃退出
- 一个宏命令,就可以程序崩溃时生成dump文件
- 一个宏命令,就可以程序崩溃时生成dump文件
- 一个宏命令,就可以程序崩溃时生成dump文件
- <如何创建一个实体历史> 时间维度 让 1:n的 产生新的实体 或者关系
- Linux修改文件时候出现崩溃,产生了一个.swap交换文件,如何修复?
- 在一个程序中需要用到全局变量(在多个class之间共享数据),请问如何定义具有这种功能的变量?或者是否有其他的方法解决多个class之间的数据共享(尽量简单实现)。 首先应该明确 Java中没有全局变
- Qt程序捕捉异常,产生dump文件
- SAP ABAP/4学习---如何给写好的一个程序分配事务代码,用户可以直接通过事务码来访问程序.或者加入收藏夹(9)
- 在cygwin环境下程序崩溃如何产生core文件
- Linux修改文件时候出现崩溃,产生了一个.swap交换文件,如何修复?
- 如何使用MAP文件找到程序崩溃时源码是哪行异常
- 如何编写一个线程安全的程序或者函数库?
- Linux修改文件时候出现崩溃,产生了一个.swap交换文件,如何修复?
- 如何使用MAP文件找到程序崩溃时源码是哪行异常
- 如何编写一个自动投票程序
- 如何编写一个自动投票程序