可以這麼說:release版本取掉了debug資訊,進行了優化。
比如ASSERT(***)這***裡不光是判斷,如果還有其他建立之類的操作,到了release版,被忽略後,也就容易帶來問題。舉個例子:int a;
debug時a值恒定,總為cdcdcdcdrelease時a值不定,為當時記憶體值這時你在使用a時就會引起結果的不一緻,甚至導緻溢出!是以對變量初始化尤其是對指針,數組變量初始化是一個良好的習慣!debug與release的不同大多是因為程式代碼寫的不規範,不嚴謹而造成的。
關于Debug和Release之本質差別的讨論~~(主要針對VC6.0和VS2003.net編譯工具而言)
一、Debug 和 Release 編譯方式的本質差別
Debug通常稱為調試版本,它包含調試資訊,并且不作任何優化,便于程式員調試程式。Release稱為釋出版本,它往往是進行了各種優化,使得程式在代碼大小和運作速度上都是最優的,以便使用者很好地使用。
Debug
和Release的真正秘密,在于一組編譯選項。下面列出了分别針對二者的選項(當然除此之外還有其他一些,如/Fd/Fo,但差別并不重要,通常他們也不會引起
Release版錯誤,在此不讨論)
Debug 版本:
/MDd /MLd
或/MTd 使用
Debug runtimelibrary(調試版本的運作時刻函數庫)
/Od 關閉優化開關
/D"_DEBUG" 相當于
#define_DEBUG,打開編譯調試代碼開關(主要針對
assert函數)
/ZI 建立
Edit andcontinue(編輯繼續)資料庫,這樣在調試過
程中如果修改了源代碼不需重新編譯