c++的程式,都會有release和debug版,主要是優化選項和執行時檢測不同。我們有時會遇上在debug版執行正常,release版執行錯誤的情況
根據我的經驗,主要是兩個原因,乙個是變數沒有初始化,導致debug和release版的初始值不同,另外就是記憶體布局不同,導致一些記憶體溢位或野指標的問題表現不同。
檢查的方法,因為release的程式往往不好除錯,所以先通過log縮小問題範圍,看看從哪句開始兩個版本結果就不同了,然後再細細檢查。
1 對於初始化的問題,最直接的方法就是檢查程式,看看是不是有初始化遺漏的情況。把漏掉的都加上,看看是不是還不一致。特別的,如果加了輸出log的語句,問題就沒了,那基本可以肯定在log之後的函式呼叫有區域性變數初始化的問題。
2 對於溢位的問題, 當然是要通過log檢查每次記憶體拷貝的緩衝區大小和需要考的位元組數,基本都能找出問題了。
3 對於野指標的問題,問題就是一塊記憶體被過早的釋放了,然後被重新申請到後修改了。如果**範圍小,還是仔細檢查**,看看是不是有獲取了一塊記憶體,然後原來那塊記憶體被釋放,或者提供記憶體的物件被析構了的情況。
跳槽經驗談
每年年初跳槽最多,跳槽是一門學問,也是一種策略。跳槽並不意味著你就能夠取得職業的成功,當面臨跳槽時,如何順利地完成跳槽,從而取得職業的成功呢?以下是一些切身體會,值得大家參考。1 不要指望會一下子能夠跳到多麼好的公司,絕大多數公司都乙個樣子。比如用友 金蝶 亞信 神馬這些公司,其實基本上乙個樣子。2...
程式設計經驗談
不知不覺做軟體已經做了十年,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手,因為和我心目中真正的高手們比起來,還差的太遠。世界上並沒有成為高手的捷徑,但一些基本原則是可以遵循的。紮實的基礎。資料結構 離散數學 編譯原理,這些是所有電腦科學的基礎,如果不掌握他們,很難寫出高水平的程式。據我的觀察,...
程式設計經驗談
1 萬丈高樓平地起。基礎是一切技能的本源,只有打好基礎,才能談得上提高,才能談得上有靈感,有突破。2 書上學的終覺淺。程式設計是一門實踐性極強的工作,只有通過不斷的程式設計實踐,才能積累程式設計經驗 提高程式設計能力,才能真正成為一名合格的開發者。3 曲徑通幽處。學習程式設計的道路是充滿艱辛的,漫長...