Подтвердить что ты не робот

CMake режим сборки RelWithDebInfo

Я думаю, что я понимаю разницу между режимами выпуска и отладки. Основные отличия в том, что в режиме отладки исполняемый файл не оптимизирован (так как это может затруднить отладку), а также символы отладки.

При создании PCRE, одной из внешних зависимостей для WinMerge, я заметил режим сборки, который я раньше не видел: RelWithDebInfo.

Различие между Debug и RelWithDebInfo упоминается здесь: http://www.cmake.org/pipermail/cmake/2001-October/002479.html. отрывок:    "RelwithDebInfo очень похож на режим Release. Он производит полностью оптимизированный код, но также создает базу данных программы и вставляет информацию об отладочной строке, чтобы дать отладчику хороший шанс угадать, где в коде вы находитесь в любое время".

Это звучит как действительно хорошая идея, однако не обязательно очевидно, как настроить. Эта ссылка описывает, как включить это для VС++: http://www.cygnus-software.com/papers/release_debugging.html

Я что-то упустил или не имеет смысла компилировать весь код выпуска как RelWithDebInfo?

4b9b3361

Ответ 1

Я что-то упускаю, или это не так иметь смысл скомпилировать весь код выпуска как RelWithDebInfo?

Это зависит от того, насколько вы доверяете своему клиенту информацию об отладке.

Дополнительная информация:

gcc кодирует отладочную информацию в код объекта.

Вот эквивалент pdb для gcc:

Как сгенерировать символ отладки gcc вне цели сборки?

Обратите внимание, что cmake не поддерживает этот подход из коробки.

Ответ 2

Насколько мне известно, код доставки для клиентов, не имеющих соответствующих символов отладки, хранящихся внутри компании, является рецептом для потери волос, когда дело доходит до отладки производственных проблем.

Отладка версий релизов с помощью отладочных символов редко отличается от отладки отладочных сборников, поэтому я рекомендую всегда делать это.

Тем не менее, я не знаю, есть ли недостатки. Было бы интересно услышать, если да.

Ответ 3

Как только вы попытаетесь отладить оптимизированную сборку релизов, вы знаете, почему это то, что вы только хотите делать, когда другого выхода нет.

В принципе, я вижу два случая, когда вам понадобится следующее:

  • У вас есть проблема, которая не появляется в отладочных сборках, поэтому вам нужно отлаживать выпускную сборку
  • У вас есть авария для клиентов и использование локально хранимой информации об отладке для понимания сбоя.

Я не знаю о вас, но мне пришлось отлаживать код выпуска дважды или трижды за последнее десятилетие, и мне удалось работать в компаниях, где проблемы с клиентами у клиентов не были проблемой.

Да, возможно, неплохо также иметь отладочную информацию для ваших версий релизов, но VS не устанавливает это таким образом, и для двух случаев в каждом десятилетии, где вам это нужно, не стоит устанавливать это вручную каждый раз. Так как CMake дает это бесплатно, сделайте это.

Ответ 4

Производственный код не нуждается в раздувании размера, которое несет отладочная информация.

Ответ 5

Даже когда информация об отладке создается для сборки релиза, она гораздо менее полезна для целей отладки, чем сборка отладки. Причина в том, что многие переменные и промежуточные выражения оптимизированы и, следовательно, недоступны в отладчике.