2009-04-17 56 views

回答

31

調試版本將包含調試器可以使用的調試符號。發佈版本通常不包含調試符號,所以如果你得到一個崩潰轉儲,你將得到的是一堆十六進制地址,而不是有用的符號名稱。

調試版本沒有通過優化進行編譯(-O0 with gcc),而發佈版本通過優化進行編譯(通常爲-O2-O3)。優化使得調試更加困難。如果你試圖調試一個發佈應用程序,調試器會變得非常困惑,因爲彙編語句不再與HLL語句相匹配,語句得到重新排序,函數得到內聯,循環得到展開等。

調試和發佈版本也定義了不同的預處理器符號,並且某些代碼是基於這些符號進行條件編譯的(例如,數組邊界檢查,斷言等),儘管這是高度依賴於應用程序的。一個典型的例子是#define NDEBUG的發佈模式,這會導致斷言被刪除。

0

在Tiger中,調試版本是「零關聯」的。這是它僅針對你的環境進行了優化,並不是一個完整的構建。

相關問題