您的位置:首页 > 其它

MFC异常处理之TRACE, ASSERT, VERIFY使用方法

2016-10-22 20:43 597 查看

TRACE

TRACE的接收方式类似于printf语句。TRACE中调用的语句仅在debug版的调试状态下出现,并在debug窗口中输出诊断信息。而在release版本中不计算传入的表达式。也就是说,Release版本中调用TRACE无效。

示例

int nCount =9;
CString strDesc("total");
TRACE("Count =%d,Description =%s\n",nCount,strDesc);


为了保证TRACE功能起作用,需要在TOOLS->MFC TRACER中选择 “ENABLE TRACING”,点击OK

ASSERT

ASSERT也接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。在debug版本下出现。对于系统中出现这个宏导致的中断,应该认为你的函数调用未能满足系统的调用此函数的前提条件。在Release版本中不计算传入的表达式。也就是说,Release版本中调用ASSERT无效。

void foo( char p, int size )
{
ASSERT( p != 0  ); //确认指针是有效的
ASSERT( size >= 100 ); //确认缓冲区至少有100个字节
// 后续处理
}


VERIFY

和ASSERT功能类似。所不同的是,在Release版本中,ASSERT不计算输入的表达式的值,而VERIFY计算表达式的值。ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY计算表达式的值,但不管值为0还是非0都不会输出诊断信息。

void foo(char p, int size )
{
char q;
VERIFY(q = p);
ASSERT((size 〉= 100);
// 后续处理
}


总结

TRACE,ASSERT,VERIFY只在Debug版本中起作用。且TRACE,ASSERT,VERIFY仅仅在MFC中可用。除VERIFY在Release版本中计算表达式的值外,其他三个在Release版本中不计算表达式的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息