CMake режим сборки RelWithDebInfo - PullRequest
13 голосов
/ 06 августа 2009

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

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

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

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

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

Ответы [ 5 ]

15 голосов
/ 06 августа 2009

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

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

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

5 голосов
/ 06 августа 2009

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

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

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

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

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

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

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

5 голосов
/ 06 августа 2009

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

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

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

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

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

2 голосов
/ 06 августа 2009

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

0 голосов
/ 24 июля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...