开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 15406|回复: 105
收起左侧

[易源码分享] [源码分享解读]软件报错崩溃怎么办?

[复制链接]

结帖率:35% (12/34)
发表于 2016-10-22 22:58:13 | 显示全部楼层 |阅读模式   江苏省苏州市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 Will 于 2016-10-22 23:02 编辑

看此贴前,请先浏览上一个帖子!
http://bbs.125.la/forum.php?mod=viewthread&tid=13948748


本来呢,我是准备写成易的,但是呢,结构指针那块太麻烦。所以我把源码讲解一遍,感兴趣的可以写成易语言的代码。


注:为了便于广大易友阅读,英文说明自动使用小号字体


1:SetUnhandledExceptionFilter->Enables an application to supersede the top-level exception handler of each thread of a process.
After calling this function, if an exception occurs in a process that is not being debugged, and the exception makes it to the unhandled exception filter, that filter will call the exception filter function specified by the lpTopLevelExceptionFilter parameter.可以设置一个函数,位于最顶层异常处理上,当异常发生时,如果下面没有对应的异常处理,就会流入这个函数所指定的回调函数中。
原型:LPTOP_LEVEL_EXCEPTION_FILTER WINAPI SetUnhandledExceptionFilter(
  _In_ LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter);
很简单,只要一个参数lpTopLevelExceptionFilter这个参数原型如下:
LONG WINAPI UnhandledExceptionFilter(  
_In_ struct _EXCEPTION_POINTERS *ExceptionInfo
);

2:就是在上面设置的这个函数里写代码了,所有没有处理的异常都会流入这个函数

3:
MiniDumpWriteDump,把dump写出去,原型如下:
BOOL WINAPI MiniDumpWriteDump(  _In_ HANDLE                            hProcess,
_In_ DWORD                             ProcessId,  
_In_ HANDLE                            hFile,
_In_ MINIDUMP_TYPE                     DumpType,  
_In_ PMINIDUMP_EXCEPTION_INFORMATION   ExceptionParam,  
_In_ PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,  
_In_ PMINIDUMP_CALLBACK_INFORMATION    CallbackParam
);
hProcess,ProcessId都放进程自己的;第3个文件句柄,CreateFile返回;第4个MINIDUMP_TYPE,一般是MiniDumpNormal(=0)就够用了,如果想进阶,所有的值如下:
typedef enum _MINIDUMP_TYPE {   MiniDumpNormal                          = 0x00000000,  MiniDumpWithDataSegs                    = 0x00000001,  MiniDumpWithFullMemory                  = 0x00000002,  MiniDumpWithHandleData                  = 0x00000004,  MiniDumpFilterMemory                    = 0x00000008,  MiniDumpScanMemory                      = 0x00000010,  MiniDumpWithUnloadedModules             = 0x00000020,  MiniDumpWithIndirectlyReferencedMemory  = 0x00000040,  MiniDumpFilterModulePaths               = 0x00000080,  MiniDumpWithProcessThreadData           = 0x00000100,  MiniDumpWithPrivateReadWriteMemory      = 0x00000200,  MiniDumpWithoutOptionalData             = 0x00000400,  MiniDumpWithFullMemoryInfo              = 0x00000800,  MiniDumpWithThreadInfo                  = 0x00001000,  MiniDumpWithCodeSegs                    = 0x00002000,  MiniDumpWithoutAuxiliaryState           = 0x00004000,  MiniDumpWithFullAuxiliaryState          = 0x00008000,  MiniDumpWithPrivateWriteCopyMemory      = 0x00010000,  MiniDumpIgnoreInaccessibleMemory        = 0x00020000,  MiniDumpWithTokenInformation            = 0x00040000,  MiniDumpWithModuleHeaders               = 0x00080000,  MiniDumpFilterTriage                    = 0x00100000,  MiniDumpValidTypeFlags                  = 0x001fffff
} MINIDUMP_TYPE;
第5个PMINIDUMP_EXCEPTION_INFORMATION嗯- -这个有3个成员:
typedef struct _MINIDUMP_EXCEPTION_INFORMATION {  
DWORD               ThreadId;
PEXCEPTION_POINTERS ExceptionPointers;  
BOOL                ClientPointers;
} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
第①个参数就GetCurrentThreadId下,第②个参数就是UnhandledExceptionFilter参数,最后个写TRUE(=1)第6,7直接写NULL(=0)即可。
整体流程就是这个样子,需要扩展的话可继续阅读MDSN相关帮助文档
(扩展链接:https://msdn.microsoft.com/en-us/library/windows/desktop/ms679292(v=vs.85).aspx)



写这个真是累,大家看懂看不懂的都给个好评呗~好评呗~好评呗~




评分

参与人数 7好评 +5 精币 +12 收起 理由
佑优 + 1 + 1 感谢分享,很给力!~
suangke + 1 + 4 新技能已get√
A—小哲 + 1 年度版 win10 64 测试无效!!!
Farmer° + 1 + 3 感谢分享,很给力!~
我妻由良 + 1 SetUnhandledExceptionFilter易语言例子N年前就有了
hhy5201314 + 1 + 1 精彩文章希望继续努力
堕天圣黑猫 + 1 + 1 感谢分享,很给力!~

查看全部评分


本帖被以下淘专辑推荐:

签到天数: 17 天

发表于 2024-11-15 10:40:10 | 显示全部楼层   福建省泉州市
666666666666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2023-12-10 22:45:03 | 显示全部楼层   四川省巴中市
新技能已get√
回复 支持 反对

使用道具 举报

发表于 2023-6-10 13:57:31 | 显示全部楼层   湖北省黄石市
感谢大佬
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2023-3-13 22:57:16 | 显示全部楼层   贵州省贵阳市
看不懂,先好评了
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2022-12-23 16:32:41 | 显示全部楼层   浙江省杭州市
求c++源码!
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 25 天

发表于 2022-8-10 22:30:28 | 显示全部楼层   江苏省连云港市
好评,学习了
回复 支持 反对

使用道具 举报

结帖率:67% (24/36)

签到天数: 6 天

发表于 2022-1-26 00:20:19 | 显示全部楼层   广东省惠州市
        年度版 win10 64 测试无效!!!
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)
发表于 2021-12-17 00:44:27 | 显示全部楼层   湖北省武汉市
~好评~好评~好评~好评
回复 支持 反对

使用道具 举报

签到天数: 25 天

发表于 2021-4-19 06:08:18 | 显示全部楼层   浙江省绍兴市
回复 支持 反对

使用道具 举报

结帖率:89% (8/9)
发表于 2021-2-17 16:31:49 | 显示全部楼层   广东省汕头市
没怎么看懂
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表