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)

  • 相关阅读:
    绿盟UTS综合威胁探针管理员任意登录
    深信服EDR3.2.21任意代码执行
    linux反弹shell总结
    mysql在8.0版本下修改密码的命令
    Linux提权常用漏洞速查表
    windows提权常用系统漏洞与补丁编号速查对照表
    通达OA<=11.5版本SQL注入——附件上传
    通达OA<=11.5版本SQL注入——日程安排
    希尔伯特曲线python3实现
    深信服edr控制中心漏洞——验证码逻辑错误
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/3280025.html
Copyright © 2011-2022 走看看