2009-04-17 2 views

ответ

31

Отладочные сборки будут содержать отладочные символы, которые могут использоваться отладчиком. Релизные сборки часто не содержат отладочных символов, поэтому, если вы получаете дамп сбоя, все, что вы получите, это куча шестнадцатеричных адресов вместо полезных имен символов.

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

Отладочные и выпускные сборки также определенные символы препроцессора, и некоторый код условно компилируется на основе этих (например, проверок границ массивов, утверждений и т. д.), хотя это сильно зависит от приложения. Типичным примером может быть #define NDEBUG для режима освобождения, который вызывает удаление утверждений.

0

В тигре, отладочные сборки «с нулевой связью». Это он оптимизирован только для вашей среды и на самом деле не является полной сборкой.

Смежные вопросы