【Jiya&Chieng】(贰)CoreDump —— 崩溃前的自拍

本文介绍了如何通过自定义异常处理函数在Windows平台生成Coredump文件,以便于程序崩溃后的快速定位与修复。文中还提供了制造崩溃插件MakeCrash的实现方式,并指导如何利用Coredump进行调试。

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

CoreDump —— 崩溃前的自拍

Jiya 一定会成为一个了不起的项目。我对此是深信不疑的。然而在成长的道路上,挫折总是难免的。无论坚强还是不坚强,项目们总有机会在各自的角落里陷入崩溃。

为了能让Jiya 在每次崩溃的时候,可以快速地恢复,甚至成长,我给她的Chieng 添加了生成coredump 文件的能力。

一、Coredump

Coredump 文件可以保存程序运行时的内存、寄存器状态,以及函数调用堆栈信息等。我们完全可以把它的生成过程,理解为一次自拍行为。

Windows 平台上,在不依赖其它工具的情况下,一个程序想要生成coredump 文件,是需要自身添加相关的代码的。

其中的关键,就在于自定义异常处理函数,像这样:

SetUnhandledExceptionFilter(MyUnhandleExceptionFilter);

SetUnhandledExceptionFilter 这个函数名字里可以看到,就是设置一个自定义的函数,来处理那些没有被try-catch 的异常。

然后,我们在自定义的MyUnhandleExceptionFilter 中进行自拍,即创建coredump,像这样:

MiniDumpWriteDump(...);

二、MakeCrash

这是一个用来制造崩溃的插件。作为一场演习,它的关键在于可以通过编译,但运行时崩溃。

可以达到这种效果的方法有很多。我的做法比较简单,像这样:

scanf("%s",0);

三、定位崩溃点

Jiya 运行了MakeCrash 之后,她会崩溃,然后生成一个core.dmp 文件。双击它,VS 就会自动生成一个Solution。点击“使用 仅限本机 进行调试“,像这里:
这里写图片描述
然后它就会运行到出错的那个地方,然后中断。

需要注意的是,coredump 有时候不会运行到出问题的地方。这种情况可能是因为,在release 下编译时没有开启生成调试信息,而且还做了优化。下方的第三个博客,对此给出了相关建议。

关于coredump 还可以参考下列几个博客:
1)http://blog.youkuaiyun.com/fhxpp_27/article/details/9701867
2)http://blog.youkuaiyun.com/pkrobbie/article/details/6636310
3)http://blog.youkuaiyun.com/haizimin/article/details/50262901
当然了,如果再仔细学习DbgHelp.h自然可以更好。

Jiya_v1.0.1 下载链接:
http://download.youkuaiyun.com/download/woshichenjiacheng/9942241

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值