Разница между конфигурациями Debug и Release в VS

153
26 августа 2021, 03:40

Мне известно назначение каждой конфигурации и то, что в Release проводится оптимизация, а в Debug машинный код полностью соответствует написанному программистом. Ну и так же там объявляются разные константы ещё... Меня интересует какая именно отладочная информация содержится в сборке с конфигурацией Debug. По идее генерируется файл PDB и всё. Но ведь и в Release он так же создаётся. В чём разница? Встраивается ли именно в сам модуль какая то отладочная информация? Есть ещё какие то важные отличия между конфигурациями?

Answer 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 до аттача, будут в неоптимизированном и удобном для отладки варианте.

READ ALSO
C#. Передать дату в формате YYYY-MM-DDTHH:MM:SS в DateTime, не в string

C#. Передать дату в формате YYYY-MM-DDTHH:MM:SS в DateTime, не в string

Не получается передать дату в формате YYYY-MM-DDTHH:MM:SS в DateTime, не в stringПробовала DateTime перевести в

156
Сортировка в структуре c#

Сортировка в структуре c#

Нужно упорядочить записи по возрастанию номера группа с помощью интерфейса IComparer, а также сделать добавление данных в массив без ввода с клавиатурыЯ...

100
Распознавание лиц Emgu c#

Распознавание лиц Emgu c#

Программа обнаружает лица и распознает имена через текстовый файлНо если появляется лицо, имени которого нет в файле, то он берет имя первого...

83
Многопоточная обработка блоков данных

Многопоточная обработка блоков данных

Прошу помощи в разборе проблемыЯ использую 2 экземпляра класса который реализует идею паттерна поставщик/потребитель

91