Как посмотреть IL код прямо в Visual Studio? C#
Видел как-то на скриншоте, у программиста было открыто окно с IL кодом прямо в visual studio, как он это сделал возможности спросить не было. Подскажите?
Использую Visual Studio 2019
Ответы (1 шт):
Меня этот вопрос тоже заинтересовал, и я постарался поискать информацию. Нашел не сразу.
Благодаря замечанию vitidev к моему ответу - я знаю, что это, скорее всего, решарпер.
В нём эта функция включается через ReSharper -> Windows -> IL Viewer в меню решарпера.
На картинках 7 и 8 показано, как включить, и результат. Конечно, очень красивый - как ивсё у JetBrains.
В VS есть прекрасный "обычный дебаггер" - потому, что это общий дебаггер для всех типов проектов.
Его можно вызвать Debug > Windows > Dissasembly (Ctrl + Alt + D). Вызывается только в режиме отладки.
Он показывает "дизассемблнутый" машинный код, что, конечно же, не является MSIL-ом. Заметим, что есть особенность: MSIL при компиляции в машинный код обрабатыветя еще и JIT'ом, так что однозначного сооветствия между командой MSIL и группой команд ассемблера может не быть.
Как примерно выглядит - показано на картинке 1 в конце ответа.
Следующее, что приходит в голову - это ILDASM. Вызывается как отдельная программа, дизассемблирует сборки (*.dll и *.exe, по простому говоря), написанные на NET, в MSIL. Поскольку эта штука приходит вместе со студией, (или, возможно, вмесие с NET core SDK?) - то поддерживает все версии NET, от старенького NET Framework и до NET Core.
Не позволяет производить отладку, только показывает MSIL-код.
Показан на картинке 2.
Есть прекрасный - судя по отзывам - инструмент, который называется NET Reflector (производства Redgate). Интегрируется с VS. Вызывается прямо из VS. Платный. Но, судя по видео на их сайте, он осуществляет скорее "дизасеемблирование в исходный код" каких то чужих бинарников и отладку на уровне исходного кода. По моему, окна с MSIL там нет. Еслия ошибаюсь - может, кто то, кто с Reflector'ом работал - меня поправит?
Видео с демонстрацией работы - на этой их странице.
Мне очень понравился инструмент, котрый я уже упомянул в комментарии к вопросу - написанный Джозефом Албахари (да-да, тем самым, который написал "C#. Справочник. Полное описание языка") LinqPad. Помимо хороших возможностей по отладке LINQ и SQL запросов, там есть также (в профессиональной версии) трансляция в IL - код.
Видео про использование на ютьюбе
Картинка 3.
И последнее, что мне попалось -наверное, самое близкое к "отладке IL кода". Это проект венгерского программиста Zsolt Petrény под названием Dotnet IL Editor (DILE).
Эта штука позволяет отлаживать .NET 1.0/1.1/2.0/3.0/3.5/4.0 - сборки.
Я эту штуку взял из гитхаба и собрал (пришлось подправить буквально пару ссылок на DLL-ки в с++ - сной части проекта).
Она позволяет загружать и запускать сборки - с теми ограничениями на версию фремворка, которые я только что написал.
При этом есть особенность, которая отражена на картинке 4 в конце ответа - нужно после загрузки сборки в DILE назначить startup assembly.
Потом можно поставить breakpoint и по шагам отлаживать IL - код.
Процесс отладки простого кода (чуть ниже) показан на картинке 5.
Чего не хватает: я не нашел, как посмотреть память (дамп памяти). Самое близкое к этому - просмотр объектов, показанный на картинке 6.
Вообще, штука мощная, учитывая, что это отладчик с исходными кодами - то есть, теоратически, его можно попробовать улучшать под свои нужды.
Если у кого то есть еще идеи - буду рад, если Вы ими поделитесь в комментариях.
Код, котрый я запихивал в отладчик:
using System;
namespace DebMsil2 {
class Program {
struct Point {
public int X, Y;
}
static void Main(string[] args) {
Console.WriteLine("Press any key!");
Console.ReadLine();
Point p;
p.X = 12;
p.Y = 15;
Console.WriteLine("x" + "y" + "z");
Console.ReadLine();
}
}
}
Картинка 1 (Windows debugger):

Картинка 4 (назначаем в DILE startup point):

Картинка 5 (процесс отладки в DILE):

Картинка 6 (просмотр значений полей объекта):

Картинка 7 (победитель - Решарпер, включаем показ IL кода):

Картинка 8 (победитель - Решарпер, вот как он показывает IL код):


