cocos2d-x关于CC_ASSERT断言BUG!
来源:互联网 发布:php选择题及答案 编辑:程序博客网 时间:2024/04/28 11:01
程序在debug模式下正常运行,而在release模式下却发生莫名的异常,异常非常诡异,弄的我甚至怀疑cocos2d-x的源代码。
晚上在公司比较闲,正好可以慢慢进行排查,最后发现在我自定义的action中出现问题。
这个action负责GLSL特效部分,部分代码如下:
void JEffectAction::startWithTarget(CCNode *pTarget){ CCSprite * spr = dynamic_cast<CCSprite*>(pTarget); CC_ASSERT(spr); CCActionInterval::startWithTarget(pTarget); CCGLProgram* pProgram = new CCGLProgram(); string source = jeffect_source(m_glslfile.c_str()); CC_ASSERT(pProgram->initWithVertexShaderByteArray(ccPositionTextureColor_vert, source.c_str())) spr->setShaderProgram(pProgram); pProgram->release(); CHECK_GL_ERROR_DEBUG(); spr->getShaderProgram()->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position); spr->getShaderProgram()->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color); spr->getShaderProgram()->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords); CHECK_GL_ERROR_DEBUG(); spr->getShaderProgram()->link(); CHECK_GL_ERROR_DEBUG(); spr->getShaderProgram()->updateUniforms(); CHECK_GL_ERROR_DEBUG(); // 生成u_time的地址 m_progressUniformLocation = glGetUniformLocation(spr->getShaderProgram()->getProgram(), "u_time"); // for(map<string,float>::iterator itr = m_uniforms.begin(); itr != m_uniforms.end(); ++itr){ glUniform1f(glGetUniformLocation(pProgram->getProgram(), itr->first.c_str()), itr->second); }}
通过一行行的排查,最终发现是
CC_ASSERT(pProgram->initWithVertexShaderByteArray(ccPositionTextureColor_vert, source.c_str()))
这一行没有执行,跟进CC_ASSERT代码发现这个宏最终是这样定义的:
#ifdef NDEBUG#defineassert(e)((void)0)#else
也就是说,上面我写的那行代码为空,于是出现异常。
教训就是,在采用assert进行断言时,断言参数不要写逻辑,否则该逻辑在release模式下不能得到执行!
尼玛又要重新审核了。。╮(╯▽╰)╭
- cocos2d-x关于CC_ASSERT断言BUG!
- CC_ASSERT 或 CCAssert宏 断言跟断点差不多-----------cocos2d-x
- CC_ASSERT 或 CCAssert宏 断言跟断点差不多-----------cocos2d-x
- 【Cocos2d-x 019】 CC_ASSERT 或 CCAssert宏 断言跟断点差不多
- cocos2d-x 使用断言
- cocos2d-x-bug集
- Cocos2d-x之 断言宏CCAssert
- cocos2d-x 编译 经验&& bug
- cocos2d-x CCRandom_0_1()有BUG.
- cocos2d-x 3.2引擎bug
- cocos2d-x 阶段性bug总结
- cocos2d-x & cocostudio bug记录
- Cocos2d-x关于ScrollView
- 关于Cocos2d-x书籍
- 关于cocos2d-x
- cocos2d-x 关于websocket
- [cocos2d-x]关于定时器
- [cocos2d-x]关于CC_CALLBACK
- ORA-25153: Temporary Tablespace is Empty
- thinkpad T430 :Intel 7系主板在XP下装AHCI驱动的方法
- 绑定变量
- 于丹:这个时代读书到底有何用
- 7 分区管理
- cocos2d-x关于CC_ASSERT断言BUG!
- 数据流挖掘简述
- VMware中Linux与Windows共享文件的一种简单好用方法
- Qwt使用之QwtPlot
- 黑马程序员 04 Java WEB学习笔记< HTML & CSS >
- 通向架构师的道路(第二十七天)IBM网格计算与企业批处理任务架构
- 黑马程序员_java反射学习
- jQuery特效
- 如何将自己的代码贴上去显示这种效果?