Разница между конфигурациями Debug и Release в VS
Мне известно назначение каждой конфигурации и то, что в Release проводится оптимизация, а в Debug машинный код полностью соответствует написанному программистом. Ну и так же там объявляются разные константы ещё. Меня интересует какая именно отладочная информация содержится в сборке с конфигурацией Debug. По идее генерируется файл PDB и всё. Но ведь и в Release он так же создаётся. В чём разница? Встраивается ли именно в сам модуль какая то отладочная информация? Есть ещё какие то важные отличия между конфигурациями?
Отслеживать
задан 4 окт 2018 в 13:15
1,120 1 1 золотой знак 14 14 серебряных знаков 39 39 бронзовых знаков
Relise — то же самое что Debug только без отладочных файлов, ресурсов, и других функций. За счёт чего работает быстрее и сборка меньше весит.
– user192664
4 окт 2018 в 13:39
Ну это понятно итак. Ваш ответ не соответствует вопросу.
4 окт 2018 в 13:49
Но ведь и в Release он так же создаётся Можете в настройках отключить генерирование PDB файлов, если вам они не нужны в релизе.
4 окт 2018 в 15:39
При чём тут нужны не нужны. Я про различия спрашиваю
4 окт 2018 в 15:49
Вам уже выше ответили про различия. Если вам нужен конкретный, более точный ответ — пишите конкретный, более точный вопрос.
4 окт 2018 в 15:57
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Debug и Release — это просто названия стандартных конфигураций, создаваемых. Никаких завязок именно на имя конфигурации нет. Можно создать свою с названием, например, QQQ — через Build / Configuration Manager.
Поэтому эти конфигурации отличаются только тем, что выставлено для них по умолчанию в свойствах проекта:
- Для Release включена оптимизация кода на уровне компилятора C#
- Для Debug включена константа DEBUG (проще ставить #if в коде)
- Тип выдачи Debugging Information — Full для Debug, PDB Only для Release.
Режимы Full от PDB Only отличается только тем, что в режиме Full на сборку навешивается атрибут DebuggableAttribute .
Этот атрибут прямо при старте приложения отключает некоторые оптимизации JIT, и заставляет JIT отслеживать соответствие смещения IL смещению в получаемом нативном коде, что позволяет отладчику более точно отслеживать текущую выполняемую строку.
И настройку оптимизации, и настройку трекинга отладчик может поменять в момент аттача к процессу, DebuggableAttribute просто позволяет сделать это заранее, так что даже методы, обработанные JIT до аттача, будут в неоптимизированном и удобном для отладки варианте.
Debug/Release в чем разница?

Господа, кто-нибудь располагает информацией, в чем конкретно состои разница между проектом собранным в дебаге и релизе? Какая доп. информация включается в дебаг? Ведь и там и там на выходе бинарник. Чтобы не у вас не возникло впечатления, что этот пост в оффтопике, поясню. мне стало любопытно, какая инфа позволяет средствам автоматизированного тестирования отслеживать какая функция выполняется в текущий момент. например какие функции вызывались во время теста, а какие нет
#2
LeshaL
![]()
Отправлено 18 декабря 2007 — 14:19
Господа, кто-нибудь располагает информацией, в чем конкретно состои разница между проектом собранным в дебаге и релизе? Какая доп. информация включается в дебаг? Ведь и там и там на выходе бинарник. Чтобы не у вас не возникло впечатления, что этот пост в оффтопике, поясню. мне стало любопытно, какая инфа позволяет средствам автоматизированного тестирования отслеживать какая функция выполняется в текущий момент. например какие функции вызывались во время теста, а какие нет
Расскажите нам, пожалуйста, о каком языке программирования речь идет.
Абстрактно говоря — в дебаг версии может быть включено:
1. Отладочный вывод
2. Дополнительные параметры запуска приложения, которые умеют подсчитывать, например, расход памяти или время выполнения итд. итп.
3. Дополниетельные интерфейсы (hotspot-ы), используемые например, для подключения различных средств автоматизации
#3
Jazzyekim
Отправлено 18 декабря 2007 — 15:17
Расскажите нам, пожалуйста, о каком языке программирования речь идет.
Речь идет о языках С/С++
#4
Darkus




- Город: Казахстан, г.Астана
Отправлено 19 декабря 2007 — 03:59
Грубо говоря, в Debug версию включается дополнительная информация для возможной отладки.
(Так, например, кроме сборок(написанных на С#) дополнительно ложатся в конечный каталог pdb файлы.)
К тому же разработчики часто вставляют конструкции типа Debug.Assert, которые в релиз версии просто не сработают.
В вашем случае (С\С++) нужно обязательно тестировать и Debug, и Release версии, т.к. там есть особенности связанные с освобождением памяти (тестировать нужно на предмет «утечек» памяти — некоторые функции по-разному себя ведут, к тому же кое где идёт освбождение ресурсов автоматом в Debug).
Сборки C# практически избавлены от такой разницы (Debug\Release), там заведует этим делом сборщик мусора. Хотя, попадаются иногда тоже интересные случаи.
Отличие Debug от Release в Visual Studio

Начинающим и берущим небольшие Азы с Visual Studio очень часто интересно, чем-же отличаются 2 версии, а точнее Debug от Release. Но все это очень просто, даже исходя из названия. Главное различие состоит в назначении: конфигурация Debug предназначена для компиляции на этапе разработки и отладки программы, а Release — для сборки программы и последующего её использования пользователями программы.
В конфигурации Release удаляется отладочная информация из исполняемого файла. Это приводит к уменьшению размера исполняемого файла (обычно в несколько раз). Так же исключаются дополнительные проверки. Например, инициализированы переменные или нет:
#include int main()

Из приведённого выше рисунка видно, что в конфигурации Release никаких проверок не осуществляется, а в конфигурации Debug они есть. Так в STL, например, производятся дополнительные проверки итераторов перед операциями инкремента и декремента:

Поэтому в конфигурации Release программа может работать значительно быстрее, но и могут возникнуть новые ошибки, если код недостаточно хорошо написан и протестирован.
С уважением Ваш ИТ Инженер.
Уникальный проект на рынке недвижимости, следи за тем как растут цены на недвижимость, прогнозируй рост.
Стараюсь для Вас. Если понравилась статья, меня можно отблагодарить 🙂
Если у Вас Возникли вопросы или что-то не получилось, то мы Вас ждем на нашем форуме технической поддержки — Service Desk УМВР, Ждем Ваших отзывов и предложений, а так-же вопросов и пожеланий!
Похожие записи
- svchost грузит процессор на 50%
- DiskPart. Как очистить HDD от существующих разделов
- PowerShell: Это Вам не Bash. Установка в Debian
- Домашний ESXi
- Telegram Desktop: или 2 учетные записи
- Developer Tools Internet Explorer 8
- reverse proxy шаблон c SSL для VestaCP и её форков
Чем отличается Debug от Release в Visual Studio?

Список параметров вы можете увидеть в свойствах проекта.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Love Family, Love Code
В свойствах проекта можно глянуть разницу
Опции для юилда слегка отличаются по умолчанию.
Аналогично в web config
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Дмитрий Ковальский @dmitryKovalskiy
программист средней руки
Данные режимы отличаются настройками конфигураций. web.config — общие настройки на все конфигурации. web.debug.config и web.release.config — настройки конкретных конфигураций. Ну и если вы используете конструкцию #if DEBUG
в вашем коде — то в конфигурации release эти инструкции не будут компилироваться и включаться в конечные сборки.
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- C#
- +1 ещё
Как проверять столкновение префаба и UI панели в Unity?
- 1 подписчик
- 5 часов назад
- 23 просмотра