• 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)

  • 相关阅读:
    MF研究:TinyCLR运行时原理
    不到600美元,即可获取一套MF Porting kit 3.0
    SideShow Gadget开发[1]
    我眼中的WinHEC大会台前幕后
    Visual C++ 2008入门经典 第四章数组 字符串(二) 简单
    PHP的常用函数 简单
    Visual C++ 2008入门经典 第五章程序结构(二) 简单
    用PHP将Unicode 转化为UTF8 简单
    sql GROUP_CONCAT(... SEPARATOR) 简单
    Visual C++ 2008入门经典 第四章数组 字符串(练习题) 简单
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/3280025.html
Copyright © 2020-2023  润新知