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

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

 crassr3cords15 июн. 2012 г., 18:02
Как ? Я действительно не знаю, как можно отлаживать в режиме выпуска
 Eugene Petrov12 июл. 2012 г., 06:18
Я столкнулся с тем, что не могу перейти на другие сборки, пока я отлаживал в режиме релиза

Ответы на вопрос(3)

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

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

 15 июн. 2012 г., 18:23
Да. По-прежнему выполняется машинный код, поэтому отладчик может это проверить.
 Vladislavs Burakovs15 июн. 2012 г., 18:15
Я имею в виду, странно, что такой большой контроль над этими процессами предоставляется. Потому что сегодня я увидел, что мой коллега беспрепятственно отлаживал код в режиме выпуска, и когда я спросил его об этом, он не знал.
 Vladislavs Burakovs15 июн. 2012 г., 18:19
Хм, так что будет сложнее для отладчика, но все же возможно? (Я имею в виду, без файла pdb)?
 15 июн. 2012 г., 20:11
@KendallFrey Отладчик может показать вам машинный код, но он не может связать его с исходным исходным кодом, поэтому отладка подобного кода, скорее всего, будет очень сложной.
 15 июн. 2012 г., 18:18
Без символов отладки (файл .pdb) отладчик не будет знать, каков был исходный исходный код, но он все равно сможет пошагово проходить через двоичный код. AFAIK, отладчик может присоединиться к любому процессу, который он хочет, и пройти через него. ОС дает большие полномочия отладчикам.

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

Symbols (the related .pdb file) that were built along with the assembly .dll or .exe Source (the related .cs, .vb, etc. files) The executing machine code must be unoptimized

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

Optimization контролируется гранулярно/ отладки опция компилятора, но может быть дополнительно проконтролирована/ optimize-.

Решение Вопроса

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

 15 июн. 2012 г., 18:09
Нет, извините, я сказал, что оптимизация кода усложняет отладку. Я перефразирую это, так что это не сбивает с толку.
 Vladislavs Burakovs15 июн. 2012 г., 18:06
Итак, вы говорите, что отладка конфигурации усложняет отладку ??

Ваш ответ на вопрос