По той или иной причине мне иногда кажется полезным или просто интересно посмотреть на оптимизированный вывод компилятора для функции.
Для неуправляемого кода на C/С++ мой любимый способ сделать это состоял в том, чтобы скомпилировать в режиме Release, придерживаться точки останова в интересующей вас функции, запускать и просматривать разборку в Visual Studio, когда она попадает в точку останова.
Недавно я попробовал это с проектом С# и обнаружил, что эта техника не работает. Даже в режиме Release разборки, которые я вижу, явно не оптимизированы. Я обнаружил и отключил (в Visual Studio 2010) параметр "Отладка... Параметры и настройки... Отладка... Общая... Запретить оптимизацию JIT на загрузке модуля", которая, предположительно, приближает меня к тому, что я хочу, только теперь он предупреждает меня, когда я пытаюсь запустить его, и тогда я не могу заставить его остановиться на точке останова, чтобы я мог видеть разборку.
Итак, если я хочу увидеть дизассемблированный, оптимизированный вывод дрожания CLR (4.0) для функции, какой лучший способ это сделать? Чтобы быть ясным, я хотел бы увидеть разборки x86 (или предпочтительно x86_64), а не только разборки IL (что вы можете увидеть в Reflector).