关键词不能为空

当前您在: 主页 > 英语 >

编写的windows程序,崩溃时产生crash dump文件的办法

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-16 00:41
tags:

-

2021年2月16日发(作者:proactive)


编写的


windows


程序,崩溃时产生


crash dump


文件的办法








编写的


windows


程序,


崩溃时产生


crash dump


文件的办




一、引言


dump


文件是


C+ +


程序发生异常时,保存当时程序


运行状态的文件,是调试异常 程序重要的方法,所以程序崩


溃时,除了日志文件,


dump< /p>


文件便成了我们查找错误的最


后一根救命的稻草。


windows


程序产生


dump

文件和


linux



序产生


dump


文件的方式不一样,


linux


默认是不让产生


core


dump


文件,只要在用户自己的


~/.bash_profile

< p>
文件中增加


ulimit -S -c unlimited > /dev/null 2>&1


这样程序崩溃就可以


产生可调试 的


core dump


文件了。但是


w indows


环境就得写


代码才能实现了。二、原理

< p>
windows


程序当遇到异常,没有


try- catch


或者


try-catch


也 无法捕获到的异常时,程序就会自


动退出,如果这时候没有


du mp


文件的话,我们是没有得到


任何程序退出的信息。在


windows


程序异常退出之前,会预


先调 用一个在程序中注册的异常处理回调函数(默认是没有


设置)


, 只要我们在这个回调函数中调用


MiniDumpWriteDump

< br>函数就可以产生我们想要的


dump


< br>件。


三、


实现


1.


调用


SetUnhandledExceptionFilter

< p>
注册一个自


定义的异常处理回调函数


SetUnh andledExceptionFilter(MyUnhandledExceptionFilter);



题异常处理回调函数的原型


LONG __stdcall


MyUnhandledExceptionFilter(PE XCEPTION_POINTERS


pExceptionInfo);File< /p>


创建


dump


文件,调用


MiniDumpWriteDump


函数往


dump


文件写异常信息


inline


void CreateMiniDump(PEXCEPTION_POINTERS pep,


LPCTSTR strFileName)



{







HANDLE hFile =


CreateFile(strFileName, GENERIC_READ |


GENERIC_WRITE,











FILE_SHARE_WRITE,


NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,


NULL);







if((hFile != NULL) && (hFile !=


INV


ALID_HANDLE_V


ALUE))







{











MINIDUMP_EXCEPTION_INFORMATION


mdei;











Id












=


GetCurrentThreadId();











ionPointers



=


pep;











Pointers






= NULL;











MINIDUMP_CALLBACK_INFORMATION mci;











ckRoutine






= < /p>


(MINIDUMP_CALLBACK_ROUTINE)MiniDumpCallb ack;











ckParam








=


0;











::MiniDumpWriteDump(::GetCu rrentProcess(), ::


GetCurrentProcessId(), hFile, MiniDumpNormal, (pep != 0) ?


&mdei : 0, NULL, &mci);











CloseHandle(hFile);







}



}CreateMiniDum p


函数是在异


常处理回调函数


MyUn handledExceptionFilter


中调用的


LO NG __stdcall


MyUnhandledExceptionFilter (PEXCEPTION_POINTERS


pExceptionInfo)



{







CreateMiniDump(pExceptionInfo,








return


EXCEPTION_EXECUTE_HANDLER;



}3.



SetUnhandledE xceptionFilter


失效



vs2005


中,编译的过程中,编译器会自动给你的程序加上一



SetUnhandledExceptionFilter(NULL)


,这就会导致你之前


自定义的


SetUnhan dledExceptionFilter(MyUnhandledExceptionFilter);



效,就有可能不会产生


dump


文件,因此我们必须在自定义



SetUnha ndledExceptionFilter


之后,让之后调用的


SetUnhandledExceptionFilter


无效。增加以下代码:< /p>


//


此函数


一旦成功调用,之后对



SetUnhandledExceptionFilter


的调用


将无效




void DisableSetUnhandledExceptionFilter()



{







void* addr =


(void*)GetProcAddress(LoadLibrary(

















if (addr)







{











unsigned char code[16];











int size = 0;











code[size++] = 0x33;











code[size++] = 0xC0;










-


-


-


-


-


-


-


-



本文更新与2021-02-16 00:41,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/656819.html

编写的windows程序,崩溃时产生crash dump文件的办法的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文