Как я могу просмотреть дизассемблирование оптимизированного jitted кода.NET?

По той или иной причине я иногда нахожу это полезным или просто интересным посмотреть на оптимизированный выход компилятора для функции.

Для неуправляемого кода C/C++, мой любимый способ сделать, который это должно было скомпилировать в режиме Release, засунуть точку останова в функцию интереса, работать и просмотреть дизассемблирование в Visual Studio, когда это поражает точку останова.

Я недавно попробовал это проектом C# и обнаружил, что та техника не работает. Даже в режиме Release, дизассемблирование, которое я вижу, очевидно, не оптимизировано. Я нашел и отключил (в Visual Studio 2010) опцию "Debug... Options and Settings... Debugging... General... Suppress JIT optimization on module load", которая presumeably получает меня ближе к тому, что я хочу, только теперь она предупреждает меня, когда я пытаюсь выполнить ее, и я затем не могу заставить ее останавливаться на точке останова так, чтобы я видел дизассемблирование.

Так, если я хочу видеть демонтированный, оптимизированный вывод CLR (4.0) дрожание для функции, что лучший способ состоит в том, чтобы пойти об этом? Чтобы быть ясным, я хотел бы видеть x86 (или предпочтительно x86_64) дизассемблирование, не только дизассемблирование IL (который Вы видите в Отражателе).

17
задан Wesley Hill 6 August 2010 в 12:03
поделиться

3 ответа

Конечно, после полдня поиска ответа на этот, я сам нахожу ответ через 5 минут после того, как спрашиваю. ТАК.

Я был близок; единственный недостающий шаг из того, что у меня был в вопросе, заключался в том, что «Включить только мой код» также должен быть снят в параметрах.

Полное руководство доступно здесь: http://blogs.msdn.com/b/vancem/archive/2006/02/20/535807.aspx

17
ответ дан 30 November 2019 в 13:39
поделиться

Я считаю, что JIT знает, когда вы работаете под отладчиком, и генерирует более «удобный для отладчика» код x86, который объясняет, почему код x86, который вы видели, не был оптимизирован.

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

3
ответ дан 30 November 2019 в 13:39
поделиться

Вы можете попробовать проверить сборку NGEN, но это будет довольно сложно, поскольку метаданные отсутствуют. Но это могло сработать :)

0
ответ дан 30 November 2019 в 13:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: