自定义断言宏

时间:2009-02-09 14:46:12

标签: c++ windows assert

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

article on assert macro dangers(googlecache)

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

看看 _CrtSetReportHook功能或较新的_CrtSetReportHook2。您可以使用它来安装一个记住“看到”消息的钩子,并在再次看到时将它们报告为处理。

答案 2 :(得分:1)

遵循嵌入式母版Miro Samek的教导:

An exception or a bug?

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

答案 3 :(得分:0)

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

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

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

然后当你想让它停止触发时,在调试器中将bFireAssertion设置为true。由于它始终是真的,因此ASSERT将短路并且永远不再评估您的测试。