对复杂的软件进行动态检查有几种方法:
- assert.h implementation
assert( expression_that_must_be_true );
Linux 内核样式 :
if (in_interrupt()) BUG();
如果选中条件值没有预期值, 则会调用某些错误处理器 。
例如:
#define BUG( )
{
printf("BUG found (function %s file %s line %d)
", __FUNCTION__,
__FILE__, __LINE__);
exit(1);
}
即便在最简单的处理错误处理方法中, 某些错误也可以被隐藏( 因为“ 没有程序没有错误 ” ) 。 这个错误可以导致这个错误处理器的循环调用( 例如从打印处) 。 如果仍然有错误处理器, 错误处理器会被反复调用, 直到堆叠溢出。 最糟糕的情况是, 开发者甚至不会看到任何消息( 比如, 如果错误在打印处的起始处 ) 。
问题是:在仍然得到一些调试信息的同时,在昆虫处理器中避免重复呼叫的最佳方法是什么?