Qt程序Core dump实现

本文介绍了如何在Qt程序中实现Core dump,包括Core dump的基本概念、dump文件的用途和后缀,以及如何使用WinDbg等工具进行调试。同时提到了开源库Breakpad和qBreakPad,它们用于捕获并记录应用程序的崩溃信息。文中还提供了MiniDumper的头文件和源代码示例,用于验证Core dump功能。
摘要由CSDN通过智能技术生成

了解

  • 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>
// based on 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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值