了解
- core dump :内核转储,dump,进程当前云心的信息的导出。
- 进程对应着操作系统,程序放内存中,分配堆栈空间、进程空间。dump对这些信息导出,至少包括堆栈信息、寄存器信息。
- dump文件用winDbg文件打开,vs其实也可以。
dump文件
:后缀.dmp,程序崩溃时,内存转储文件
pdb文件
:后缀.pdb,程序的符号文件
- 开源的有Breakpad,C++崩溃检测库,捕获发布给用户的应用程序的崩溃,并记录软件崩溃的调试信息到minidump中,生成.dmp文件,崩溃记录文件格式是二进制,体积小。
- qBreakPad(用qt封装过的)
CreateFile()函数
CreateFile(文件名,访问模式,共享模式,指向安全属性行号(NULL),如何创建,文件属性,用于复制文件句柄)
代码
MiniDumper.h
#ifndef MINIDUMP_H
#define MINIDUMP_H
#include <Windows.h>
#include <DbgHelp.h>
typedef BOOL (WINAPI *MINIDUMPWRITEDUMP)(HANDLE hProcess, DWORD dwPid, HANDLE hFile, MINIDUMP_TYPE DumpType,
CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);
#define MAX_WARNING_MESSAGE_PATH 1024
class MiniDumper
{
private:
static LPCWSTR m_szAppName;
static LPWSTR m_szAppVersion;
static LPWSTR m_szAppBuildNumber;
static WCHAR m_szMessageText[MAX_WARNING_MESSAGE_PATH];
static LPWSTR m_szDumpFilePath;
static LONG WINAPI TopLevelFilter( struct _EXCEPTION_POINTERS *pExceptionInfo );
public:
MiniDumper( );
~MiniDumper();
static void SetVersion(LPCWSTR szVersion);
static void SetBuildNumber(LPCWSTR szBuildNumber);
static void SetDumpFilePath(LPCWSTR szFilePath);
static int SetWarningMessage(LPCWSTR szMessageText)
{
if(szMessageText)
{
int iLen = wcslen(szMessageText);
if(iLen < MAX_WARNING_MESSAGE_PATH - MAX_PATH)
{
wcscpy(m_szMessageText,szMessageText);
return 0;
}
}
return 1;
}
};
#endif
MiniDumper.cpp
#include <Windows.h>
#include "MiniDumper.h"