最近調(diào)試手機(jī)游戲 調(diào)試項(xiàng)目OK沒問題 F5運(yùn)行也沒問題 電腦上window平臺也運(yùn)行正常 結(jié)果安裝到手機(jī)android平臺上角色就不動了,頭立刻就大了,android平臺和windows平臺運(yùn)行結(jié)果不一致,加上手機(jī)調(diào)試?yán)щy需要通過日志來判斷運(yùn)行情況,懷疑過跨平臺配置文件讀取失敗的問題,開始各種懷疑,各種驗(yàn)證...
后來同事說運(yùn)行打包的release版本也會出現(xiàn)同樣的問題...
經(jīng)測試 調(diào)試時選擇"運(yùn)行不調(diào)試"或直接雙擊exe文件發(fā)現(xiàn)報錯,由此推出F5調(diào)試和雙擊結(jié)果不一致,那這樣的原因很明顯了,原因不外乎這幾條:
1)變量沒有初始化就直接拿去用了:調(diào)試程序時,強(qiáng)大的VS編譯器會幫你做一些初始化的工作,將為初始化的變量置“0”,結(jié)構(gòu)變量置為NULL等,但是在雙擊運(yùn)行時,編譯器不會這么做,因此要注意一些變量記得初始化,而且盡量少用全局變量。
2)“VS的編譯器是極其牛X的,調(diào)試時候用的內(nèi)存、堆棧等等和外部運(yùn)行時候的結(jié)構(gòu)稍有差異,并且正確率更高——事實(shí)也確實(shí)如此”,因此code代碼要有個良好的習(xí)慣:變量記得一定要初始化!“變量沒賦值的情況下F5,debug和release是有差別的,一個版本會清零,另一個不會這么做。”
3)自己申請的內(nèi)存,用完后記得釋放,不然也可能會引起這類錯誤。
4)不要忽視調(diào)試時的warning,雖然很多時候你無視他的存在不會帶來什么影響,但是某一天你會被他傷到的,他們指示你程序潛在錯誤的“利器”,所以盡量多的將warning消除。
我的原因就是為角色添加了一個新成員變量m_bMoveEnable 卻沒有初始化, 在android平臺有時候初始化為false, 導(dǎo)致角色出生時不移動這樣嚴(yán)重的BUG
有人說 bool變量不是會默認(rèn)初始化為xx么? 是,可能強(qiáng)大的VS會在你調(diào)試的時候幫你初始化,那運(yùn)行時呢? 還有跨平臺默認(rèn)的初始化都是未知的...
所以我們要養(yǎng)成初始化的好習(xí)慣,否則現(xiàn)在沒有發(fā)生問題,未來的未來,可能會導(dǎo)致嚴(yán)重的BUG,而浪費(fèi)我們巨大的時間去解決,甚至是無從解決...
posted on 2012-07-31 08:43
風(fēng)輕云淡 閱讀(1429)
評論(1) 編輯 收藏 引用 所屬分類:
C++