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