zoukankan      html  css  js  c++  java
  • ASSER、VERIFY、TRACE详解

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

    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来实现类似操作。作为一般规则,我们应在开始时用每一个对象之前检查数据讹误,

    ASSERT_VALID(this);ASSERT_VALID(pView);

    VERIFY()

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

    TRACE()

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

    这三个宏在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)

  • 相关阅读:
    听说你的MES系统又失败了?
    GROUP BY你都不会!ROLLUP,CUBE,GROUPPING详解
    对 MES 感兴趣?赶紧看过来!
    SQL 高级查询(层次化查询,递归)
    智能制造概念
    简单又实用的分享!SharePoint母版页引用(实战)
    原创分享!SharePoint母版页修改(实战)
    入门者必看!SharePoint之CAML总结(实战)
    新手必看!Office Web Apps 2013 安装与配置(实战)
    SharePoint布局页引用(实战)
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/3280025.html
Copyright © 2011-2022 走看看