ASSER、VERIFY、TRACE详解

ASSERT()被测试它的参数,若是参数为零,则中断执行并打印一段说明消息。在Release版本的程序中它不起任何做用。c++

ASSERT()使用的时候必须保证参数表达式中不能有函数调用,所以对于任何有函数调用的参数表达式,应该使用宏VERIFY(),以保证表达式中的函数调用在Release版本中会被正确求值。编辑器

断言(assertion)用断言信息(程序,模块,assertion行)的对话框执行,对话框右三个按钮:"Break ","Re[eat"("Debug"),and "continue"("Ignore"). "Break"结束程序,"continue"忽略断言,最有用的是"Repeat"按钮,按下它在断言的地方开源代码编辑器。在这里你能够测试全部的变量并明白哪里出了问题。函数

例如:ASSERT(pPointer);ASSERT(n>0 && n<100);ASSERT(0);测试

ASSERT在执行简单验证时颇有用,但对于c++对象,特别是用cobject派生的对象,则有更好的方法ASSERT_VALID来实现相似操做。做为通常规则,咱们应在开始时用每个对象以前检查数据讹误,this

ASSERT_VALID(this);ASSERT_VALID(pView);指针

VERIFY()调试

VERIFY ()和ASSERT()很类似,区别在于Release版本中它仍然有效.对象

TRACE()it

TRACE()基本上就是函数printf()的一个复制品,惟一的区别在于它把结果输出到调试窗口。在Release版本中它是无效的。通常是用TRACE0(),TRACE1()。TRACE2()。。。而不用TRACE()。io

这三个宏在Release版本中都不会产生任何实质性的影响,他们是否起做用取决因而否认义了预订义了宏/

经常使用用法:

为了控制传用指针:

void SomeFun(SomeType* pPointer)

{

       ASSERT(pPointer);

//some instrctions。

}
你能够在“switch”和“if”操做中捕获奇怪的值

例如:if(nWaterTemp〉=0 && nWaterTemp<50)

{

     //some instrction

}

else if(nWaterTemp>=50 && nWaterTemp<=100

{

    //some instruction.

}

else {

ASSERT(0);

}

对值得断言:

ASSERT(nSomeValue>=MinValue and nSomeValue<=MaxValue);

ASSERT(nOtherValue !=0)

相关文章
相关标签/搜索