• 不要在 _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中断言语句直接被优化掉了。。。
  • 相关阅读:
    Java EE部分-- 各框架对比与项目优化
    Java EE部分--Mybatis
    Java EE部分--MVC
    Java EE部分--Hibernate、Struts
    Java EE部分--spring(二)
    Java EE部分--spring(一)
    IO和NIOAIO
    JDK、 反射

    线程(二)
  • 原文地址:https://www.cnblogs.com/mforestlaw/p/3289478.html
Copyright © 2020-2023  润新知