最近调试手机游戏 调试项目OK没问题 F5运行也没问题 电脑上window平台也运行正常 结果安装到手机android平台上角色就不动了,头立刻就大了,android平台和windows平台运行结果不一致,加上手机调试困难需要通过日志来判断运行情况,怀疑过跨平台配置文件读取失败的问题,开始各种怀疑,各种验证...
后来同事说运行打包的release版本也会出现同样的问题...
经测试 调试时选择"运行不调试"或直接双击exe文件发现报错,由此推出F5调试和双击结果不一致,那这样的原因很明显了,原因不外乎这几条:
1)变量没有初始化就直接拿去用了:调试程序时,强大的VS编译器会帮你做一些初始化的工作,将为初始化的变量置“0”,结构变量置为NULL等,但是在双击运行时,编译器不会这么做,因此要注意一些变量记得初始化,而且尽量少用全局变量。
2)“VS的编译器是极其牛X的,调试时候用的内存、堆栈等等和外部运行时候的结构稍有差异,并且正确率更高——事实也确实如此”,因此code代码要有个良好的习惯:变量记得一定要初始化!“变量没赋值的情况下F5,debug和release是有差别的,一个版本会清零,另一个不会这么做。”
3)自己申请的内存,用完后记得释放,不然也可能会引起这类错误。
4)不要忽视调试时的warning,虽然很多时候你无视他的存在不会带来什么影响,但是某一天你会被他伤到的,他们指示你程序潜在错误的“利器”,所以尽量多的将warning消除。
我的原因就是为角色添加了一个新成员变量m_bMoveEnable 却没有初始化, 在android平台有时候初始化为false, 导致角色出生时不移动这样严重的BUG
有人说 bool变量不是会默认初始化为xx么? 是,可能强大的VS会在你调试的时候帮你初始化,那运行时呢? 还有跨平台默认的初始化都是未知的...
所以我们要养成初始化的好习惯,否则现在没有发生问题,未来的未来,可能会导致严重的BUG,而浪费我们巨大的时间去解决,甚至是无从解决...
posted on 2012-07-31 08:43
风轻云淡 阅读(1373)
评论(1) 编辑 收藏 引用 所属分类:
C++