zoukankan      html  css  js  c++  java
  • 不要在 _ASSERT() 宏中执行功能代码 AND RELEASE版调试办法

            程序在DEBUG版正常运行,在RELEASE版就崩溃了,想调试找问题,却发现RELEASE版根本走不到断点。。。 需要在工程配置中将 Configuration Properties->Linker->Debugging->Generate Debug Info 设为 Yes,如下图
    然后进行调试,调试发现走过断言时应被赋值的指针依然指向NULL

    _ASSERT(VARIANT_FALSE != m_pDoc->loadXML(_bstr_t(xmlContent.c_str())));

    m_pRoot = m_pDoc->GetdocumentElement();

             在RELEASE版中,m_pRoot始终都指向 0x00000000;
            网上查询发现是断言宏的问题:ASSERT,_ASSERTE提供程序一个简洁的机制在调试程序时来检测一个假设. 他们非常灵活因为它们不需要使用#ifdef来防止在一个发行版程序中被调用. 这个灵活性是通过定义宏_DEBUG. _ASSERT和_ASSERTE只有当_DEBUG被定义才有效. 如果没有定义, 就会在预处理中被删去.
            写代码时为了图方便,直接在断言中执行方法调用,在RELEASE中断言语句直接被优化掉了。。。
  • 相关阅读:
    VMware安装Centos7过程记载
    php服务器设置指示
    php变化变量
    php参数
    php变量类型
    php外界PHP变量
    php语句的脱离方法
    PHP算术操作符
    PHP通过调用传递(Passingbyreference)
    php初始化数组
  • 原文地址:https://www.cnblogs.com/mforestlaw/p/3289478.html
Copyright © 2011-2022 走看看