Перейти к содержимому

Чем debug отличается от release с

  • автор:

Разница между конфигурациями 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

  • Members
  • PipPipPipPip
  • 424 сообщений
    • Город: Казахстан, г.Астана

    Отправлено 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?

    ulrich-schnauss

    Список параметров вы можете увидеть в свойствах проекта.

    Ответ написан более трёх лет назад
    Комментировать
    Нравится 1 Комментировать
    Love Family, Love Code

    В свойствах проекта можно глянуть разницу
    Опции для юилда слегка отличаются по умолчанию.
    Аналогично в web config

    Ответ написан более трёх лет назад
    Комментировать
    Нравится Комментировать
    Дмитрий Ковальский @dmitryKovalskiy
    программист средней руки

    Данные режимы отличаются настройками конфигураций. web.config — общие настройки на все конфигурации. web.debug.config и web.release.config — настройки конкретных конфигураций. Ну и если вы используете конструкцию #if DEBUG
    в вашем коде — то в конфигурации release эти инструкции не будут компилироваться и включаться в конечные сборки.

    Ответ написан более трёх лет назад
    Комментировать
    Нравится Комментировать
    Ваш ответ на вопрос

    Войдите, чтобы написать ответ

    c#

    • C#
    • +1 ещё

    Как проверять столкновение префаба и UI панели в Unity?

    • 1 подписчик
    • 5 часов назад
    • 23 просмотра

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *