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中断言语句直接被优化掉了。。。
  • 相关阅读:
    大数据面试(hbase)
    大数据面试(spark)
    大数据面试(kafka)
    ssm整合cas单点登录
    sm整合shiro权限控制
    js中的this机制
    xftp个人版下载
    window.innerHeight属性和用法
    使用elementui图标按钮调整宽高后图标不居中
    git常用的操作记录一下
  • 原文地址:https://www.cnblogs.com/mforestlaw/p/3289478.html
Copyright © 2011-2022 走看看