在 Windows/c++ 上,我想自定义断言对话框以永远忽略断言,因此我可以更积极地使用断言。我了解编写正确的断言宏是多么困难,并且不希望这样做,只需挂钩对话代码即可。有没有简单的方法(或简洁的技巧)来做到这一点?
关于断言宏危险的文章(googlecache)
更新:更激进 => 更频繁地使用和用于非崩溃错误。我希望能够永远忽略一个断言,所以如果一个小错误断言发生在一个循环中,它不会有效地停止我的进程。
在 Windows/c++ 上,我想自定义断言对话框以永远忽略断言,因此我可以更积极地使用断言。我了解编写正确的断言宏是多么困难,并且不希望这样做,只需挂钩对话代码即可。有没有简单的方法(或简洁的技巧)来做到这一点?
关于断言宏危险的文章(googlecache)
更新:更激进 => 更频繁地使用和用于非崩溃错误。我希望能够永远忽略一个断言,所以如果一个小错误断言发生在一个循环中,它不会有效地停止我的进程。
如果“更积极”是指使用断言进行错误处理,那么最好使用异常。
查看 _CrtSetReportHook函数或更新的_CrtSetReportHook2。您可以使用它来安装一个挂钩,该挂钩会记住“已看到”消息,并在再次看到时将其报告为已处理。
如果代码不需要是线程安全的,并且如果您只想“永远”忽略断言,因为它们将在每次程序运行第一次后被忽略,而不是永远你第一次忽略它,之后它不会再次触发所有程序运行,然后只需将断言测试与默认设置为 false 的静态 bool 结合起来。
void someFunc(...)
{
...
static bool bFireAssertion( false );
ASSERT( bFireAssertion || <your assertion test> );
...
}
然后,当您希望它停止触发时,请在调试器中将 bFireAssertion 设置为 true。因为它总是正确的,所以 ASSERT 将短路并且不再评估您的测试。