博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vs 自动生成core dump文件
阅读量:7100 次
发布时间:2019-06-28

本文共 3200 字,大约阅读时间需要 10 分钟。

  一直以来觉着core dump这个东西很神奇,在初步学习的时候也没有个大方向,最近项目需要记录程序崩溃时的日志信息,因此在网上寻找相关的信息,此时core dump也成为了我重点关注的东西。

    说说我的辛酸历史吧,刚毕业1年的我,C++领域的东西还是知之甚少啊,记得又一次面试被问起了demp文件,我当时真是对此一无所知,然而面试过后,我 也查询了有关dump的信息,由于当时是百度的,所以也没有查到什么有用的信息,直到最近项目上的需求我又重新拾起了这个问题,而这次是用google搜 索的相关字眼,结果被我找到了几篇不错的文章,而且还附带有事例代码,短短几分钟,我就成功的在我的程序中生成了dump文件,在此记录一下,也非常感谢 帮助我的几篇博客。

 

:该篇博客中封装好的代码,下载下来,导入自己的工程,在main函数中执行有关代码,dump文件在异常时会自动写入

: 这篇文字的内容基本和上面的文章一样,只是略显乱一点,这么说应该不太合适。

下面 我贴出头文件和main函数中应该加入的代码的代码:

minidump.h

1 #include 2 #pragma comment(lib, "dbghelp.lib") 3  4  5 bool IsDataSectionNeeded(const WCHAR* pModuleName) 6 { 7     if (pModuleName == 0) 8     { 9         return false;10     }11 12     WCHAR szFileName[_MAX_FNAME] = L"";13     _wsplitpath(pModuleName, NULL, NULL, szFileName, NULL);14 15     if (wcsicmp(szFileName, L"ntdll") == 0) return true;16     return false;17 }18 19 BOOL CALLBACK MiniDumpCallback(20     PVOID                            pParam,21     const PMINIDUMP_CALLBACK_INPUT   pInput,22     PMINIDUMP_CALLBACK_OUTPUT        pOutput23     )24 {25     if (pInput == 0 || pOutput == 0) return FALSE;26     switch (pInput->CallbackType)27     {28     case ModuleCallback:29         if (pOutput->ModuleWriteFlags & ModuleWriteDataSeg)30             if (!IsDataSectionNeeded(pInput->Module.FullPath))31                 pOutput->ModuleWriteFlags &= (~ModuleWriteDataSeg);32         // fall through33     case IncludeModuleCallback:34     case IncludeThreadCallback:35     case ThreadCallback:36     case ThreadExCallback:37         return TRUE;38     default:;39     }40     return FALSE;41 }42 43 void CreateMiniDump(EXCEPTION_POINTERS* pep, LPCSTR filename)44 {45     HANDLE hFile = CreateFile(filename, GENERIC_READ | GENERIC_WRITE,46         0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);47 48     if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))49     {50         MINIDUMP_EXCEPTION_INFORMATION mdei;51         mdei.ThreadId = GetCurrentThreadId();52         mdei.ExceptionPointers = pep;53         mdei.ClientPointers = FALSE;54         MINIDUMP_CALLBACK_INFORMATION mci;55         mci.CallbackRoutine = (MINIDUMP_CALLBACK_ROUTINE)MiniDumpCallback;56         mci.CallbackParam = 0;57         MINIDUMP_TYPE mdt = (MINIDUMP_TYPE)(MiniDumpWithPrivateReadWriteMemory |58             MiniDumpWithDataSegs |59             MiniDumpWithHandleData |60             0x00000800 |61             0x00001000 |62             MiniDumpWithUnloadedModules);63         MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),64             hFile, mdt, (pep != 0) ? &mdei : 0, 0, &mci);65 66         CloseHandle(hFile);67     }68 }
View Code

main.cpp

1 #include "minidump.h" 2  3 #include 4 #include 5  6  7  8 LONG __stdcall MyUnhandledExceptionFilter(PEXCEPTION_POINTERS pExceptionInfo) 9 {10     char creashFile[100];11     getcwd(creashFile, 100);12     strcat(creashFile, "\\CreatFile.dmp");13     CreateMiniDump(pExceptionInfo, creashFile);14     return EXCEPTION_EXECUTE_HANDLER;15 }16 17 18 19 int main(int argc, char *argv[])20 {21     SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);22 23     //do something...24 25     return 0;26 27 28 29 }
View Code

 

转载于:https://www.cnblogs.com/swarmbees/p/5621602.html

你可能感兴趣的文章
搭建自己的SIP服务器:开源sip服务器opensips的搭建及终端TwInkle的使用
查看>>
领域模型浅析
查看>>
Windows Azure VM两shut down 道路
查看>>
HDU 4283 You Are the One 区间DP
查看>>
《那些年,我们拿下FPGA》做笔记
查看>>
以Web Host的方式来寄宿Web API
查看>>
Android MediaScanner 详尽分析
查看>>
使用GDAL图书馆RPC校正问题
查看>>
Synchronized之一:基本使用
查看>>
Oracle与Sql Server复制表结构和数据
查看>>
iOS 辛格尔顿
查看>>
C#动态调用WCF接口,两种方式任你选。
查看>>
【AngularJS】—— 13 服务Service
查看>>
锐捷上网认证常见问题及解决办法
查看>>
Eclipse+超快速的模拟器Genymotion开展Android申请书(第一步:安装和配置Genymotion)...
查看>>
MySQL查看一个表的创建文本以及删除表某列的索引
查看>>
BZOJ3009 : 集合
查看>>
android图片压缩的3种方法实例
查看>>
SVN(TortoiseSVN)提交时忽略bin跟obj目录
查看>>
tophat
查看>>