-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathREADME.cn
More file actions
64 lines (49 loc) · 2.41 KB
/
README.cn
File metadata and controls
64 lines (49 loc) · 2.41 KB
1
# 本项目由weLees团队开发。# 如果有任何问题或建议请发送邮件到support@welees.com。# pattern seh Windows平台SEH机制在MAC/Linux平台上的模仿实现# 发布信息 2025.6.20 release ver 1.0 - 支持MingW64 - 优化非Windows平台代码 - 修正异常处理块嵌套维护问题 2025.5.20 发布 版本 0.99 - 增加对MingW32编译器的支持 - 增加对MAC平台的支持 - 修复在异常处理块中再次触发异常会引起循环异常的BUG - 废弃全局异常处理块链。改用线程异常处理块链 2024.11.16 发布 版本 0.9 首次发布 - 支持嵌套异常处理 - 不支持 __finally处理方式 - 不支持进程全局未处理异常函数# 项目描述本项目是在MAC/Linux平台上对Windows的SEH机制的一种模拟,以求用尽可能简单的方式捕捉和修复代码中出现的异常,以及让跨平台代码使用尽可能相同的代码和异常处理逻辑。本项目可以工作于MAC/Linux/Windows平台上,如果需要支持其他平台,请参考MAC/Linux实现的差异作出相应修改。用户应该以TRY_START{ 可能出现异常的代码}TRY_EXCEPT(ExceptionFilter){ 异常检测/修复代码}TRY_END的方式使用pattern seh。由于Linux/MAC的异常捕获机制与Windows并不相同,以及支持多平台是一个工作量非常大的工作,因此本项目并不追求与Windows SEH完全一致。如果用户希望能在所有平台上使用同一套代码,那么请使用一个平台相关的宏来定义ExceptionFilter。在MAC/Linux平台上,ExceptionFilter函数的声明是typedef int (*ExceptionFilter_MAC_LINUX)(int iSignal,siginfo_t *pSignalInfo,void *pContext)而在Windows平台上,它应该是typedef int (*Filter_WINDOW)(IN PEXCEPTION_POINTERS pContext)当异常发生时,pattern SEH会遍历并调用通过TRY_START注册的异常过滤器,在过滤器中用户需要视实际情况指示pattern SEH如何执行下一步行动。异常过滤器有3个返回值,它们是#define EXCEPTION_EXECUTE_HANDLER 1#define EXCEPTION_CONTINUE_SEARCH 0#define EXCEPTION_CONTINUE_EXECUTION -1EXCEPTION_EXECUTE_HANDLER 表示当前过滤器无法修复异常,但可以执行清除当前运行环境的工作,pattern SEH会去执行TRY_EXCEPT{}块中的代码。EXCEPTION_CONTINUE_SEARCH 表示当前过滤器不但无法修复异常,甚至无法执行清除当前运行环境的工作,pattern SEH会尝试遍历当前线程中所有嵌套的外层异常块,切换到它们的堆栈并运行异常过滤器。当所有的嵌套异常块都遍历完之后,它会象OS缺省处理方式那样报告异常并结束程序。EXCEPTION_CONTINUE_EXECUTION 表示异常事件已经修复,pattern SEH可以尝试回到异常发生的位置重新运行触发异常的代码。要注意的是:跟Windows SEH一样,异常块的嵌套是线程相关的,不同线程中的异常块不会互相嵌套。用户在试图从异常块中退出循环时应该使用TRY_BREAK替代break指令。不能在异常块中使用return/goto指令退出异常块,否则将会引起程序崩溃。