win下生成core文件

本文介绍了一个名为CCoreMgr的核心管理器类的设计与实现,该类在Windows平台上能够创建崩溃转储文件并处理应用程序崩溃,通过设置未处理异常过滤器来增强应用的稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#ifndef __CCOREMGR__H_
#define __CCOREMGR__H_
#include "singleton.h"
#include "CLogmanager.h"

#if defined(WIN32) || defined(_WIN32)
#include<Windows.h>  
#include<DbgHelp.h>  
#pragma comment(lib,"DbgHelp.lib") 
#elif  __linux__
#endif

class CCoreMgr : public CSingleton<CCoreMgr>{
    SINGLE_CLASS_INITIAL(CCoreMgr);
public:
    ~CCoreMgr();

#if defined(WIN32) || defined(_WIN32)
    static void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException);
    static LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException);
#endif

public:
    int Init();
    int UnInit();

private:
    bool mbInit;
};

#define sCCoreMgr CCoreMgr::Instance()
#endif


#include "CoreMgr.h"

CCoreMgr::CCoreMgr(){
    mbInit = false;
}

CCoreMgr::~CCoreMgr(){
}

#if defined(WIN32) || defined(_WIN32)
void CCoreMgr::CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException) {
    fprintf(stderr, "Create CoreDump\n");
    HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    // Dump信息  
    MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
    dumpInfo.ExceptionPointers = pException;
    dumpInfo.ThreadId = GetCurrentThreadId();
    dumpInfo.ClientPointers = TRUE;
    // 写入Dump文件内容  
    MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
    CloseHandle(hDumpFile);
}

LONG CCoreMgr::ApplicationCrashHandler(EXCEPTION_POINTERS *pException) {
    struct systemtime_t stNow = get_now_time();
    char szFileName[1000];
    safe_snprintf(szFileName, 1000, _TRUNCATE, "%02d-%02d-%02d-%02d-%02d-%02d.dmp", stNow.tmyear, stNow.tmmon, stNow.tmmday, stNow.tmhour, stNow.tmmin, stNow.tmsec);
    CCoreMgr::CreateDumpFile(L"AnalySisSvr.dmp", pException);
    return EXCEPTION_EXECUTE_HANDLER;
}
#endif

int CCoreMgr::Init() {
#if defined(WIN32) || defined(_WIN32)
    fprintf(stderr, "Init Core\n");
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CCoreMgr::ApplicationCrashHandler);
    mbInit = true;
#elif  __linux__
#endif
    return 0;
}

int CCoreMgr::UnInit() {
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值