Windows 下如何让程序优雅的退出

Windows 下如何让程序优雅的退出

Windows 下写C++代码经常会遇到内存崩溃的问题 当exe程序部署在生产环境中运行时 不知何时莫名奇妙的内存崩溃导致程序退出,这时候你需要让程序在退出时生成崩溃报告,并优雅的退出程序

  • 首先需要了解一个系统函数 SetUnhandledExceptionFilter()
// 函数原型
LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(
  __in          LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter
);

// lpTopLevelExceptionFilter 为传入的处理回调函数
//返回值:
//EXCEPTION_EXECUTE_HANDLER 0x1 并且执行异常处理程序 退出程序 优雅退出
//EXCEPTION_CONTINUE_EXECUTION 0xffffffff  从异常点位置继续执行
//EXCEPTION_CONTINUE_SEARCH 0x1 可以理解为正常执行 交给系统 然后系统默认弹窗提示程序崩溃
  • 代码实现
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)GetCrashInfoCallBack);
    
    long _stdcall GetCrashInfo(_EXCEPTION_POINTERS* pexcp)
    {
        
        char szDumpFile[1024];
        sprintf(szDumpFile,"%s.DUMP",argv[0]);
        HANDLE hDumpFile = CreateFileA(szDumpFile,GENERIC_WRITE,0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
        
        if( hDumpFile != INVALID_HANDLE_VALUE)
    {
        //Dump信息 
        MINIDUMP_EXCEPTION_INFORMATION dumpInfo; 
        dumpInfo.ExceptionPointers = pexcp;
        dumpInfo.ThreadId = GetCurrentThreadId();
        dumpInfo.ClientPointers = TRUE; 
        //写入Dump文件内容
        ::MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL); 
        
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值