2010-10-22 4 views
4

Есть ли какая-либо польза при запуске отладочной сборки без отладки (в отличие от сборки релиза без отладки)? И что мне не хватает при отладке сборки релиза (в отличие от отладки сборки отладки)?Зачем мне начинать отладочную сборку без отладки?

+0

Он не будет выполнять контрольные точки, часы или любые другие отладочные файлы IDE. Я уверен, что есть больше, поэтому я не отвечаю. – GManNickG

ответ

1

Чтобы добавить Adrians answer и в качестве общей точки, когда речь идет о отлаживать против выпуска сборки:

Вот некоторые факторы, которые влияют на ваши сборки:

  • Вы линковать либо отладки или релиз runtime libs (/ MD vs./ MDD)
  • NDEBUG (режим печати) или _DEBUG (режим отладки) является помощью #define
  • _SECURE_SCL (или эквивалент) определяется (или нет)
  • Компилятор оптимизации включены (в некоторой степени)

«Отладочная сборка» обычно содержит _DEBUG, _SECURE_SCL=1, /MDd и все оптимизаторы компилятора отключены. Это приводит к «безопасному», «наиболее проверенному» режиму выполнения, но также должна быть самой медленной версией, которую вы можете получить для своего исполняемого файла. Факторы скорости и безопасности должны быть полностью независимы от того, запускаете ли вы свою программу под отладчиком или нет! - Отладочная сборка дает вам максимальную безопасность и сеть с ошибками, полностью независимую от того, подключена ли программа к отладчику.

Далее идет неоптимизированные сборки выпуска: То есть, у вас есть все настройки режима высвобождения (NDEBUG, _SECURE_SCL = 0, и т.д.), но вы отключить все оптимизации компилятора. Это хорошо для тестирования, так как производительность не будет слишком увязшей, и вы можете отладить это полностью. Опять же, полезность этого не зависит от того, запускаете ли вы свою программу под отладчиком.

И наконец, придет полная оптимизация. (/Ox + полная вставка + возможно целая оптимизация prg). Хотя это то, что вы хотели бы отправить по соображениям производительности, скорее всего, у вас недостаточно людей в вашей компании, которые на самом деле способны отлаживать это. То есть, учитывая дамп сбоя, кто-то, скорее всего, нуждается в некотором количестве знаний asm и о том, что компилятор выводит, чтобы понять смысл дампа сбоя (или даже некоторую случайную точку останова при фактическом запуске под отладчиком). Опять же, плюсы/минусы для полного выбора не зависят от запуска/запуска prg под отладчиком.

0

Запуск сборки отладки без отладки может дать вам, например, следующее преимущество: если индексор с индексом индексируется с недопустимым индексом, вы получите сообщение об ошибке, в режиме деблокирования вы получите неопределенное поведение. Это одна мысль. Что вы пропустили при отладке в режиме выпуска, так это отсутствие соответствия между исходными строками и кодом сборки, поскольку оптимизатор запущен. Так что это намного сложнее для отладки в режиме выпуска

7

Наибольшие преимущества отладочных версий (за пределами IDE):

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

Самые большие недостатки:

  • Медленное выполнение, более высокое потребление памяти, больше размер файла.
  • Некоторые ошибки не очевидны, если вы не скомпилируете все с полной оптимизацией. Это связано с тем, что распределение памяти работает по-разному в сборках релизов.

Многие компании распространяют отладочные сборки на альфа-и бета-тестеры и переключаются на выпуск сборок позже.

+0

Отладка оптимизированной версии сборки * очень вводит в заблуждение * о наблюдаемых значениях переменных. Оптимизатор обычно не резервирует пространство для переменных (и использует только регистры), чтобы повторно использовать одну и ту же область памяти для нескольких последовательных переменных ... Это приводит к тому, что отладчик показывает неправильное значение для переменной, даже если переменная имеет правильное значение. –

0

Я предлагаю недавний опыт, который я не могу объяснить - иногда, когда я запускаю свое приложение, я получаю необработанные исключения при работе в среде IDE. Проблема в том, что у меня есть исключение, и я также знаю, что я не нарушаю брошенных исключений (через CTRL-D, E). Если я несколько раз ударил F5, мой обработчик ошибок в конце концов поймает исключение и справится с ним должным образом.

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

Если вам действительно нужно видеть вывод Debug во время работы вне IDE, и вы не используете что-то вроде log4net для захвата всего, вы можете использовать DebugView.

+0

Обратите внимание, что одно отличие, когда * начало * под отладчиком заключается в том, что ваше приложение будет использовать другую кучу. (отладочная куча) Это делается только при запуске с отладчиком и не имеет никакого отношения к тому, был ли выпущен prg выпуском vs. debug. –

+0

Я в замешательстве, я просто даю пример для OP, когда я запустил сборку отладки вне отладчика. Я ничего не говорю о debug vs. release. – Dave

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