Есть ли какая-либо польза при запуске отладочной сборки без отладки (в отличие от сборки релиза без отладки)? И что мне не хватает при отладке сборки релиза (в отличие от отладки сборки отладки)?Зачем мне начинать отладочную сборку без отладки?
ответ
Чтобы добавить 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 под отладчиком.
Запуск сборки отладки без отладки может дать вам, например, следующее преимущество: если индексор с индексом индексируется с недопустимым индексом, вы получите сообщение об ошибке, в режиме деблокирования вы получите неопределенное поведение. Это одна мысль. Что вы пропустили при отладке в режиме выпуска, так это отсутствие соответствия между исходными строками и кодом сборки, поскольку оптимизатор запущен. Так что это намного сложнее для отладки в режиме выпуска
Наибольшие преимущества отладочных версий (за пределами IDE):
- Утверждения включены, как другой диагностический код может быть скомпилирован в отладочном-зависимых prepocessor разделы.
- Следы стека и регулируемые часы работают правильно, поэтому вы можете иметь бета-тестеры отправить вам дамп аварийной ситуации и отладить это в вашей IDE позже.
Самые большие недостатки:
- Медленное выполнение, более высокое потребление памяти, больше размер файла.
- Некоторые ошибки не очевидны, если вы не скомпилируете все с полной оптимизацией. Это связано с тем, что распределение памяти работает по-разному в сборках релизов.
Многие компании распространяют отладочные сборки на альфа-и бета-тестеры и переключаются на выпуск сборок позже.
Отладка оптимизированной версии сборки * очень вводит в заблуждение * о наблюдаемых значениях переменных. Оптимизатор обычно не резервирует пространство для переменных (и использует только регистры), чтобы повторно использовать одну и ту же область памяти для нескольких последовательных переменных ... Это приводит к тому, что отладчик показывает неправильное значение для переменной, даже если переменная имеет правильное значение. –
Я предлагаю недавний опыт, который я не могу объяснить - иногда, когда я запускаю свое приложение, я получаю необработанные исключения при работе в среде IDE. Проблема в том, что у меня есть исключение, и я также знаю, что я не нарушаю брошенных исключений (через CTRL-D, E). Если я несколько раз ударил F5, мой обработчик ошибок в конце концов поймает исключение и справится с ним должным образом.
Причина этого не ускользнула от меня в течение нескольких недель, поэтому, когда я не хочу, чтобы выполнение прерывалось, я запускаю за пределами среды IDE и просто присоединяюсь к процессу позже, если мне нужно.
Если вам действительно нужно видеть вывод Debug во время работы вне IDE, и вы не используете что-то вроде log4net для захвата всего, вы можете использовать DebugView.
Обратите внимание, что одно отличие, когда * начало * под отладчиком заключается в том, что ваше приложение будет использовать другую кучу. (отладочная куча) Это делается только при запуске с отладчиком и не имеет никакого отношения к тому, был ли выпущен prg выпуском vs. debug. –
Я в замешательстве, я просто даю пример для OP, когда я запустил сборку отладки вне отладчика. Я ничего не говорю о debug vs. release. – Dave
- 1. Зачем мне начинать тему «приостановлено»?
- 2. Как установить отладочную сборку AOSP?
- 3. Code :: Block не создает отладочную сборку?
- 4. Jenkins зачем начинать tomcat
- 5. Дифференцируя отладочную и производственную сборку приложения для Android
- 6. Как проверить выпуск/отладочную сборку с использованием cfg в Rust?
- 7. Как отлаживать приложение, когда сторонняя библиотека не обеспечивает отладочную сборку?
- 8. В Mac OS X, как вы можете получить отладочную сборку System/LibC для отладки исходного уровня?
- 9. QtCreator/QMake на Windows Полностью отключить отладочную сборку
- 10. RegEx: Зачем начинать запятую с запятой?
- 11. Array Дополнение, зачем начинать с «i = 2»?
- 12. Изучение Vim, зачем начинать с "." параметр?
- 13. Зачем так долго начинать цикл for?
- 14. Как узнать, зачем начинать такую версию муравья?
- 15. Почему gcc добавляет символы в не-отладочную сборку?
- 16. Приложение устанавливается в отладочную сборку, но не в сборке релизов?
- 17. Зачем мне звонить new без сохранения ptr?
- 18. Как сделать отладочную сборку определенного модуля под деревом AOSP?
- 19. Зачем мне учиться haskell?
- 20. Как оптимизировать отладочную DLL для минимизации проверок отладки в VC6?
- 21. GetFileLineNumber() возвращает 0, хотя я использую отладочную сборку
- 22. Включая отладочную сборку в библиотеке Mac OS X SDK
- 23. Зачем компилятор генерирует эту сборку?
- 24. Тест на отладочную проверку
- 25. Могу ли я объединить выпуск и отладочную сборку статической библиотеки в один бинарный файл?
- 26. Методы отладки без инструментов отладки
- 27. Зачем мне конвертировать?
- 28. Отключить сборку мусора в C# для отладки?
- 29. Зачем мне нужен интерфейс?
- 30. Как отделить сборку отладки и отладки в Qt?
Он не будет выполнять контрольные точки, часы или любые другие отладочные файлы IDE. Я уверен, что есть больше, поэтому я не отвечаю. – GManNickG