3

在 Windows/c++ 上,我想自定义断言对话框以永远忽略断言,因此我可以更积极地使用断言。我了解编写正确的断言宏是多么困难,并且不希望这样做,只需挂钩对话代码即可。有没有简单的方法(或简洁的技巧)来做到这一点?

关于断言宏危险的文章(googlecache)

更新:更激进 => 更频繁地使用和用于非崩溃错误。我希望能够永远忽略一个断言,所以如果一个小错误断言发生在一个循环中,它不会有效地停止我的进程。

4

4 回答 4

2

如果“更积极”是指使用断言进行错误处理,那么最好使用异常。

于 2009-02-09T14:57:47.873 回答
2

查看 _CrtSetReportHook函数或更新的_CrtSetReportHook2。您可以使用它来安装一个挂钩,该挂钩会记住“已看到”消息,并在再次看到时将其报告为已处理。

于 2009-02-09T16:58:31.653 回答
1

遵循我们嵌入式大师Miro Samek的教导:

异常还是错误?

向下滚动以自定义断言的行为。(但请阅读其他所有内容。)

于 2009-02-09T17:11:45.773 回答
0

如果代码不需要是线程安全的,并且如果您只想“永远”忽略断言,因为它们将在每次程序运行第一次后被忽略,而不是永远你第一次忽略它,之后它不会再次触发所有程序运行,然后只需将断言测试与默认设置为 false 的静态 bool 结合起来。

void someFunc(...)
{
...
static bool bFireAssertion( false );

ASSERT( bFireAssertion || <your assertion test> );
...
}

然后,当您希望它停止触发时,请在调试器中将 bFireAssertion 设置为 true。因为它总是正确的,所以 ASSERT 将短路并且不再评估您的测试。

于 2009-02-09T20:18:41.127 回答