1
9
他们也支持快速失败的理念,解释说 this article Jim Shore。 |
2
7
有些人会写:
写作更实际:
我喜欢使用断言,因为它们很容易被一个简单的编译时常量关闭,或者被用来做其他事情,比如准备一个错误报告。我通常不会在发布某些东西时打开断言(至少,不是通常的方式)。 使用它们使我免于在别人的电脑上犯愚蠢的错误。那些喜欢测试我的字母代码的勇敢的灵魂。使用它们加上像Valgrind这样的工具有助于确保在提交之前捕获到可怕的东西。 |
3
2
需要考虑的一个重要区别是,您希望通过断言捕获哪些类型的错误。我经常使用断言来捕获编程错误(例如,使用空参数调用方法)和处理验证错误的不同机制(例如,传入错误长度的社会保障号码)。对于断言捕获的编程错误,我希望快速失败。对于验证错误,我希望响应不那么激烈,因为数据中可能存在错误是正常的(例如,用户执行某种类型的数据输入)。在这些情况下,正确的处理方法可能是将错误报告给用户并继续运行。 |
4
1
如果该方法有一个指定的前置条件来获取非空消息参数,那么您希望程序在前置条件不存在时失败,然后必须修复bug的来源。 我相信在开发安全关键软件时断言更重要。当然,您更愿意在正式指定软件时使用断言。 |
5
1
对于断言(以及与代码构造相关的许多其他主题)的出色讨论,请查看 Code Complete 史蒂夫·麦康奈尔。他花了整整一章来有效地使用断言。 |
6
1
我使用它们来验证是否提供了有效的依赖类。对于构造函数DI中的exmaple,您通常接受某种您依赖的外部类来提供一些操作或服务。 所以你可以断言(classref!-空,“ClassRef不能为空”);而不是等待您将消息传递给ClassRef并获取一些其他异常,例如异常:访问冲突或同样不明确的东西,这些东西可能不会立即从代码中明显地看到。 |
7
0
测试我们的假设是非常有用的。断言不断地确保不变量为真。简而言之,它用于以下目的:
有时,当我们不想使用try/catch/throw时,我倾向于使用assert_return()。
我建议通过报告测试构建中的错误来终止应用程序。然后在生产系统中,它应该记录和错误,并从函数返回,表示它不能这样做。 |
SRobertJames · 使用printf的gdb显示 1 年前 |
Subin · 在vscode中运行c时出错 1 年前 |
Community wiki · 如何调试Python内存故障? 1 年前 |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
Chris Brandon · 如何使节点在堆栈溢出时中断? 2 年前 |