最近調試手機游戲 調試項目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
風輕云淡 閱讀(1418)
評論(1) 編輯 收藏 引用 所屬分類:
C++