Зачем мне начинать отладочную сборку без отладки? - PullRequest
4 голосов
/ 22 октября 2010

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

Ответы [ 4 ]

7 голосов
/ 22 октября 2010

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

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

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

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

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

1 голос
/ 22 октября 2010

Чтобы добавить к Адрианам ответ и в целом, говоря о сборках отладки и релиза:

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

  • Вы ссылаетесь на отладочные или выпускные библиотеки времени выполнения (/ MD против / MDd)
  • NDEBUG (режим выпуска) или _DEBUG (режим отладки) # определены
  • _SECURE_SCL (или некоторый эквивалент) определен (или нет)
  • Оптимизация компилятора включена (до некоторой степени)

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

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

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

0 голосов
/ 22 октября 2010

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

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

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

0 голосов
/ 22 октября 2010

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

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