C 的异常捕捉实现
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 的异常捕捉实现相关推荐
- Js中最常见的异常捕捉 TryCatch
Js中最常见的异常捕捉 TryCatch 参考文章: (1)Js中最常见的异常捕捉 TryCatch (2)https://www.cnblogs.com/Zwq286179/p/5999450.ht ...
- Python的try... excep异常捕捉机制
Python的try... excep异常捕捉机制 一.没有加入异常捕捉机制 二.加入try ... except 异常捕捉 1.已知错误类型 (例如下面已知列表索引错误类型`IndexError`) ...
- Spring全局异常捕捉实现HandlerExceptionResolver接口,在error-page配置捕捉异常
方式一 1.1 创建全局异常类 该类要实现HandlerExceptionResolver接口,详细如下: package com.rbc.hbms.util;import java.util.Ha ...
- 程序员基本功08异常捕捉的陷阱
1.使用finally正确地关闭资源 在实际开发中,经常需要 在程序中打开一些物理资源,如数据库连接.网络连接.磁盘文件等,打开这些物理资源后必须显示关闭,否则将引起资源泄露.JVM的垃圾回收机制属于 ...
- 《C++ Primer 第五版》(第5.1-5.6节) ——异常处理机制(try语句块,throw表达式和catch异常捕捉处理单元)
1. 异常处理机制 C++中使用try,throw和catch三个关键字来实现异常的触发.抛出和处理的功能,具体通用语法形式如下: try{ if(true) normal program-state ...
- python中使用什么来实现异常捕捉_Python异常原理及异常捕捉实现过程解析
关于选课程序,最近着实有点忙,没机会复习os.pickle两部分模块,所以数据储存和字典读取成为了一个问题,大致原理知道,但是具体操作可能还是得返回去再好好看看,所以目前就提前开始学习新的知识了,虽然 ...
- VC下发布的Release版程序的异常捕捉
VC下发布的Release版程序的异常捕捉寻找Release版程发生异常退出的地方比Debug版麻烦得多.发生异常的时候windows通常会弹出一个错误对话框,点击详细信息,我们能获得出错的地址和大概 ...
- python的read函数调用报错_从零开始学Python(七):文件存储I/O流和异常捕捉
这两天在搞小程序开发,耽搁了一下更新的进度,今天补上.一个完整的前端程序肯定离不开数据存储和网络两个模块,今天我们就先来讲讲python中的一种常见数据存储:文件存储!~! 文件存储(I/O操作) 何 ...
- 【Python之旅】第四篇(二):Python异常处理与异常捕捉
在Python程序的执行过程中,难免会出现异常的情况,如果做的是跟用户交互的程序,当用户输入不可接受的内容时,在可预见的范围内,我们当然是希望可以给用户一些提示,而不是原来Python内置异常中的那些 ...
- java try catch陷阱_java异常捕捉陷阱(内存泄漏,finally块,catch块,继承得到的异常)...
1. 异常捕捉的陷阱 异常处理机制是java语言的特色之一,尤其是java语言的Checked异常,更是体现了java语言的严谨性:没有完善错误处理的代码根本不会被执行.对于Checked异常, ...
最新文章
- JVM源码—教你傻瓜式编译openjdk7
- Intel Realsense D435报错:RuntimeError: Acquire failed!
- gradle的下载与环境变量配置
- GDCM:gdcm::Spacing的测试程序
- CentOS安装ClickHouse
- 事物 @Transactional
- db2和mysql语句区别_db2和mysql语法的区别是什么
- 最全三大框架整合(使用映射)——DeptDaoImpl.java
- java内联_JAVA中的内联函数
- onedrive电脑手机不同步_免费的手机电脑同步便签软件怎么找?求帮忙推荐
- 如何自己找数据分析项目来做?
- 谷歌造了个虚拟足球场,让AI像打FIFA一样做强化学习训练丨开源有API
- 初步认识C语言中的选择和循环语句
- 从三字经看古代幼儿教育
- ImageWatch无法显示图像
- 踩坑记录丨记Jekyll + Github Pages搭建个人博客时遇到的各种问题
- 勾股定理用计算机怎用,勾股定理公式计算器
- 强哥说Java--Java Scanner 类
- json、txt、xlsx
- 初中微型计算机基础评课,初中语文组评课稿---《台阶》
热门文章
- 那时刚毕业的我,曾参与惊心动魄 3Q 大战
- 了不起的Virtual DOM(一):起源
- 高可用高性能负载均衡软件HAproxy详解指南-第三章:HAproxy实例
- 终于完成需求模块开发了,jQuery实现的效果,PHP操作数据库
- jsonSuggest插件如何在使用前激活
- Jboot 2.0.1 发布,新增基于 Fescar 的分布式事务支持
- Flask-SQLAlchemy 中多表链接查询(不使用外键)
- 2月07日云栖精选夜读:观点 | 阿里云 MVP 唐俊飞:安全性可以认为是一种能力...
- ElasticSearch基础杂烩-配置-索引-优化
- iOS Podfile里面的use_frameworks!引发的血案