当前位置 : 主页 > 网络安全 > 测试自动化 >

错误处理 – 为什么断言编译出生产版本(性能除外)?

来源:互联网 收集:自由互联 发布时间:2021-06-22
从生产代码中删除断言的典型理由是性能.这对我来说没有意义.是的,从性能至关重要的5%左右的代码中删除一些断言可能是一个有用的优化.然而,对于其他95%,它们可能没有可测量的影
从生产代码中删除断言的典型理由是性能.这对我来说没有意义.是的,从性能至关重要的5%左右的代码中删除一些断言可能是一个有用的优化.然而,对于其他95%,它们可能没有可测量的影响,并且断言只会增加这样的可能性:如果您的代码有错误,它将快速失败且以易于诊断的方式失败.

我在D中编写了大部分编程,它有一个enforce()函数,它基本上完成了assert()的功能,除了它保留在发布版本中.我通常发现自己大部分时间都在使用enforce(),而assert()仅在一些执行()太昂贵的地方.

除了性能之外还有其他任何原因可以从发布版本中删除断言吗?如果没有,为什么语言不会使断言的默认行为始终在发布版本中执行,并提供更冗长,更难记忆的第二个函数,例如在发布版本中剥离的expensiveAssert()并推荐它仅用于代码的性能关键部分?

我认为assert()首先是一个纯粹的开发工具.

最终用户的软件应提供某种错误处理(通过记录和/或向用户显示消息). assert()不提供错误处理.

但是,我通常使用自己的发布和调试断言函数.发布和调试断言仅用于异常错误 – 这种情况永远不会发生.但是它们提供了有用的错误消息(对开发人员有用,通常对最终用户没那么有用).

可能发生的错误(输入/输出,错误配置,……)被明确处理并向用户发送消息.

网友评论