异常流入和流出

异常,即非预期的情况发生,可能导致程序走向未定义的分支,最严重的造成不可挽回的事故。

我们以模块为单位分析异常的来源和走向:

  • 直接调用:模块A调用模块B(一般是底层)的API
    需要对B的API进行所有分支进行处理,有些API本身不安全,比如strcpy,可以直接让系统挂掉
  • 间接调用:模块A向模块C(一般是上层)注册了一个回调
    会向稳定的模块C引入不稳定元素
  • 提供调用:模块A向外部提供了接口D
    需要向用户提供程序是否执行成功,必要时直接由内部输出错误信息到控制台

对于已经可以捕获的异常,需要通过某种方式记录下来,用来说明不正常的数据(最核心的一点),如终端打印,errno,文件,网络等等。以下是简单的发展轨迹:

  1. 仅打印到终端和通过返回值告知
  2. 加入函数名和行号
  3. 区分消息等级,模块统一
  4. 区分消息所属channel,通过mask开关
  5. 加入errno用于告知具体的错误
  6. 写入文件

参考Linux内核各个等级:

信息等级理解
KERN_EMERG必要资源缺乏,无法工作起来
KERN_ALERT需要外界参与,比如其他线程,比如直接是用户,提供紧缺资源
KERN_CRIT在临界区中发现紧急情况,不会用
KERN_ERR资源出错,正常工作会受到影响
KERN_WARNING资源受限,还是可以正常工作的
KERN_NOTICE提示用户一些改进方法等
KERN_INFO向用户提供当前资源信息
KERN_DEBUG调试信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值