Сборки отладки будут содержать символы отладки, которые могут использоваться отладчиком. Сборки выпуска часто не содержат отладочных символов, поэтому, если вы получите аварийный дамп, все, что вы получите, это набор шестнадцатеричных адресов вместо полезных имен символов.
Отладочные сборки не компилируются с оптимизацией (-O0
с gcc), в то время как релизные сборки компилируются с оптимизацией (обычно -O2
или -O3
). Оптимизация делает отладку намного сложнее. Если вы попытаетесь отладить приложение выпуска, отладчик будет сильно сбит с толку, поскольку операторы сборки больше не совпадают с операторами HLL, операторы переупорядочиваются, функции встроены, циклы развертываются и т. Д.
В сборках отладки и выпуска также определены различные символы препроцессора, и некоторый код условно компилируется на их основе (например, проверки границ массива, утверждения и т. Д.), Хотя это сильно зависит от приложения. Типичным примером может быть #define NDEBUG
для режима деблокирования, что приводит к удалению утверждений.