Отладка в.NET в режиме выпуска

Некоторое время назад я прочитал статью о CLR, где автор показал, что если проект компилируется в режиме DEBUG, перед каждым оператором приходит команда NOP, что позволяет отлаживать код. Тем не менее, сегодня я обнаружил, что мы также можем отлаживать в режиме релиза... Пожалуйста, помогите понять разницу.

3 ответа

Решение

Вы можете отлаживать в режиме выпуска до степени. Debug и Release - это просто конфигурации сборки (из которых вы можете создать множество), реальная разница в том, что конфигурация Debug не оптимизирует сгенерированный двоичный код (оптимизированный код усложняет отладку). Он также генерирует дополнительные данные отладки, которых нет.

Для отладки кода.net, чтобы вы могли просмотреть исходный код во время его выполнения, обычно требуется три вещи:

  • Символы (связанный файл.pdb), которые были собраны вместе со сборкой.dll или.exe
  • Исходный код (связанные файлы.cs,.vb и т. Д.)
  • Исполняемый машинный код должен быть неоптимизирован

Символы контролируются /debug: {full | pdbonly} флаг. Если вы укажете /debug:full (даже в сборке релиза с отключенной оптимизацией компилятора) вы можете подключиться к уже запущенному процессу и выполнить пошаговый код. Если у вас есть /debug:pdbonly, затем вы должны использовать отладчик для запуска программы (и не можете просматривать символы при присоединении к уже запущенному процессу).

Оптимизация детально контролируется параметром компилятора /debug, но может дополнительно контролироваться параметром / optimize-.

Компиляция в режиме выпуска оптимизирует полученный бинарный файл, что затрудняет (но не делает невозможным) отладчик, чтобы узнать, какой двоичный код поступил из какой строки строки исходного кода.

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

Другие вопросы по тегам