低级库函数中的异常处理
本文关键字:异常处理 库函数 | 更新日期: 2023-09-27 18:15:48
我们正在编写一个低级函数库(主要是模拟一些Matlab信号处理函数)-基本上是一组静态对象上的静态方法。然后,这将在更高级别的框架(我们也在编写)中使用。框架和底层库都是供内部使用的(不是公开的)。
对于这种情况,什么是好的异常处理模型?我看到的两个选项是:
1. 在底层库中没有异常处理——让除零等异常冒泡出来并在消费框架中处理它们。
2. 在每个低级函数中,系统地检查参数值是否可能产生溢出,除零,-ve num的意外根等,并抛出带有诊断文本的ArgumentException。
2。提供优于1的优势这证明额外的代码是合理的吗?我的感觉是,这可能使问题发生的位置更容易定位。
是做一个还是做另一个?
答案在很大程度上取决于所讨论的库:
- 是由贵组织独家使用,还是公开分发?
- 是否存在安全隐患?
- 失败的商业成本是多少?
一般来说,在"public"* api上执行参数验证是一个很好的实践。当发生故障时,你该怎么做取决于你自己,但是抛出一个带有信息丰富的文本描述的ArgumentException是一个好主意,并且对使用你的库的开发人员很有帮助。
有很多资源在各种场景中讨论这个主题,包括一个关于程序员的类似问题:方法应该验证它的参数吗?忽略它被标记为重复-它实际上不是。
如果库要向公众开放,不验证参数可能导致各种安全漏洞,因为不绑定检查数组和不验证指针可能导致恶意代码以最意想不到的方式和位置注入!
微软有一些关于他们的CRT库函数的事情要说:参数验证。
我(个人)的建议是选择2:验证你的参数并抛出有意义的异常。
*"public"的含义可以有不同的解释