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)

  • 相关阅读:
    C#.NET常见问题(FAQ)-如何给Listbox添加右键菜单
    C#.NET常见问题(FAQ)-如何捕捉窗体关闭的事件,弹窗确认是否退出
    C#.NET常见问题(FAQ)-控制台程序如何输出Messagebox
    C#.NET常见问题(FAQ)-TabControl如何隐藏和显示页面
    C#.NET常见问题(FAQ)-SplitPanel如何设置上下和左右
    Oracle 存储过程
    Oracle的存储过程
    Oracle通用分页存储过程的创建与使用
    winform窗体间传值
    多线程下访问控件的方式
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/3280025.html
Copyright © 2011-2022 走看看