2019独角兽企业重金招聘Python工程师标准>>>

最近一直在关注setjmp!

发现用宏包装后的setjmp捕捉异常其实蛮native,所以简单的写了一个实现。

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <pthread.h>
#include <setjmp.h>jmp_buf env;
pthread_t p;#define __try__ do{if(!setjmp(env)){#define __catch__ }else{\#define __finally__ }}while(0);void back(int sig){switch(sig){case SIGSEGV:longjmp(env,1);break;case SIGFPE:longjmp(env,1);break;default:exit(-1);}
}void stack_protect(){signal(SIGSEGV,&back);signal(SIGFPE,&back);
}void work(){__try__;printf("%d\n",1/0);__catch__;printf("1/0 was successful...\n");__finally__;printf("work function end...\n");
}int main(int argc, char const *argv[]){stack_protect();pthread_create(&p,NULL,(void*)work,NULL);sleep(1);return 0;
}

可以看到,用简单的setjmp 回跳与 do...while 内嵌if..else(也可用switch...case实现多选项)的catch捕捉可以保证执行流程的同步。

优点:

由sig感知异常并恢复当前运行栈,也保证了业务面的不感知。

缺点:

需要捕捉的异常需要自己在初始化函数中定义。

注意:

此功能暂时无法运行在多线程环境下!

可以通过加工与条件、线程判断进行恢复,但这就需要根据实际业务逻辑来定制。^_^

转载于:https://my.oschina.net/CandyMi/blog/997829

C 的异常捕捉实现相关推荐

  1. Js中最常见的异常捕捉 TryCatch

    Js中最常见的异常捕捉 TryCatch 参考文章: (1)Js中最常见的异常捕捉 TryCatch (2)https://www.cnblogs.com/Zwq286179/p/5999450.ht ...

  2. Python的try... excep异常捕捉机制

    Python的try... excep异常捕捉机制 一.没有加入异常捕捉机制 二.加入try ... except 异常捕捉 1.已知错误类型 (例如下面已知列表索引错误类型`IndexError`) ...

  3. Spring全局异常捕捉实现HandlerExceptionResolver接口,在error-page配置捕捉异常

    方式一 1.1  创建全局异常类 该类要实现HandlerExceptionResolver接口,详细如下: package com.rbc.hbms.util;import java.util.Ha ...

  4. 程序员基本功08异常捕捉的陷阱

    1.使用finally正确地关闭资源 在实际开发中,经常需要 在程序中打开一些物理资源,如数据库连接.网络连接.磁盘文件等,打开这些物理资源后必须显示关闭,否则将引起资源泄露.JVM的垃圾回收机制属于 ...

  5. 《C++ Primer 第五版》(第5.1-5.6节) ——异常处理机制(try语句块,throw表达式和catch异常捕捉处理单元)

    1. 异常处理机制 C++中使用try,throw和catch三个关键字来实现异常的触发.抛出和处理的功能,具体通用语法形式如下: try{ if(true) normal program-state ...

  6. python中使用什么来实现异常捕捉_Python异常原理及异常捕捉实现过程解析

    关于选课程序,最近着实有点忙,没机会复习os.pickle两部分模块,所以数据储存和字典读取成为了一个问题,大致原理知道,但是具体操作可能还是得返回去再好好看看,所以目前就提前开始学习新的知识了,虽然 ...

  7. VC下发布的Release版程序的异常捕捉

    VC下发布的Release版程序的异常捕捉寻找Release版程发生异常退出的地方比Debug版麻烦得多.发生异常的时候windows通常会弹出一个错误对话框,点击详细信息,我们能获得出错的地址和大概 ...

  8. python的read函数调用报错_从零开始学Python(七):文件存储I/O流和异常捕捉

    这两天在搞小程序开发,耽搁了一下更新的进度,今天补上.一个完整的前端程序肯定离不开数据存储和网络两个模块,今天我们就先来讲讲python中的一种常见数据存储:文件存储!~! 文件存储(I/O操作) 何 ...

  9. 【Python之旅】第四篇(二):Python异常处理与异常捕捉

    在Python程序的执行过程中,难免会出现异常的情况,如果做的是跟用户交互的程序,当用户输入不可接受的内容时,在可预见的范围内,我们当然是希望可以给用户一些提示,而不是原来Python内置异常中的那些 ...

  10. java try catch陷阱_java异常捕捉陷阱(内存泄漏,finally块,catch块,继承得到的异常)...

    1.    异常捕捉的陷阱 异常处理机制是java语言的特色之一,尤其是java语言的Checked异常,更是体现了java语言的严谨性:没有完善错误处理的代码根本不会被执行.对于Checked异常, ...

最新文章

  1. JVM源码—教你傻瓜式编译openjdk7
  2. Intel Realsense D435报错:RuntimeError: Acquire failed!
  3. gradle的下载与环境变量配置
  4. GDCM:gdcm::Spacing的测试程序
  5. CentOS安装ClickHouse
  6. 事物 @Transactional
  7. db2和mysql语句区别_db2和mysql语法的区别是什么
  8. 最全三大框架整合(使用映射)——DeptDaoImpl.java
  9. java内联_JAVA中的内联函数
  10. onedrive电脑手机不同步_免费的手机电脑同步便签软件怎么找?求帮忙推荐
  11. 如何自己找数据分析项目来做?
  12. 谷歌造了个虚拟足球场,让AI像打FIFA一样做强化学习训练丨开源有API
  13. 初步认识C语言中的选择和循环语句
  14. 从三字经看古代幼儿教育
  15. ImageWatch无法显示图像
  16. 踩坑记录丨记Jekyll + Github Pages搭建个人博客时遇到的各种问题
  17. 勾股定理用计算机怎用,勾股定理公式计算器
  18. 强哥说Java--Java Scanner 类
  19. json、txt、xlsx
  20. 初中微型计算机基础评课,初中语文组评课稿---《台阶》

热门文章

  1. 那时刚毕业的我,曾参与惊心动魄 3Q 大战
  2. 了不起的Virtual DOM(一):起源
  3. 高可用高性能负载均衡软件HAproxy详解指南-第三章:HAproxy实例
  4. 终于完成需求模块开发了,jQuery实现的效果,PHP操作数据库
  5. jsonSuggest插件如何在使用前激活
  6. Jboot 2.0.1 发布,新增基于 Fescar 的分布式事务支持
  7. Flask-SQLAlchemy 中多表链接查询(不使用外键)
  8. 2月07日云栖精选夜读:观点 | 阿里云 MVP 唐俊飞:安全性可以认为是一种能力...
  9. ElasticSearch基础杂烩-配置-索引-优化
  10. iOS Podfile里面的use_frameworks!引发的血案