Отладчик кода уровня IL
Есть ли отладчик уровня IL в виде плагина VS или автономного приложения?
Отладчик Visual Studios замечательный, но он позволяет вам отлаживать либо уровень кода HLL, либо язык ассемблера, вы не можете отлаживать IL.
Похоже, что в некоторых ситуациях было бы полезно иметь возможность отлаживать уровень IL.
В частности, это может быть полезно при отладке проблемы в коде, в котором у вас нет источника.
Можно утверждать, что на самом деле полезно отлаживать IL, когда у вас нет источника, но в любом случае.
Ответы
Ответ 1
Лучший способ сделать это - использовать ILDASM для дизассемблирования управляемого двоичного файла, который будет генерировать инструкции IL. Затем перекомпилируйте исходный код IL в режиме отладки с использованием ILASM, когда вы запускаете отладчик Visual Studio, вы сможете пройти через raw IL.
-
ildasm foo.exe /OUT=foo.exe.il /SOURCE
-
ilasm foo.exe.il /DEBUG
Я написал сообщение в блоге по этой теме:
Отладка компилятора сгенерированного кода.
Ответ 2
Плагин Debug Companion VS, похоже, именно то, что я искал, за исключением того, что он не увидит проект библиотеки в моем решении. Только когда я добавил приложение для консольного выигрыша в решение, что-то появилось в этом списке проектов.
Проблема с подходом к декомпиляции/компиляции для меня заключалась в том, что код, который я отлаживал, не был моим кодом. Я мог бы декомпилировать его в любом случае, но я думаю, что нет возможности подписать эту перекомпилированную сборку, чтобы она загружалась вместо оригинальной.
С особой проблемой я выяснил, что достаточно просто отладить ее на уровне ассемблера и получить стек вызовов метода, который бросает исключение и параметры, с которыми был вызван метод.
Ответ 3
Здесь .BAT файл, который я использую для отладки IL-ассемблера в Visual Studio. Созданный файл .IL.IL содержит исходные строки исходного кода и созданные вами сборки ассемблера ИЛ, но не показывает машинный код. Я назвал пакетный файл ILDEB.BAT и вызывается как "ILDEB mypgm". Я использую директиву ассемблера IL "break", чтобы принудительно отлаживать отладчик Visual Studio при ударе.
for /f "tokens=1 delims=." %%1 in ("%1") do set NAME_ONLY=%%1
@erase/q %NAME_ONLY%.il.il
@if not exist %NAME_ONLY%.dll goto quit
ildasm /out:%NAME_ONLY%.il.il /source /nobar %NAME_ONLY%.dll
@if not exist %NAME_ONLY%.il.il goto quit
ilasm /dll /debug /out=%NAME_ONLY%.dll %NAME_ONLY%.il.il
@if not exist %NAME_ONLY%.dll goto quit
peverify %NAME_ONLY%.dll
:quit
Ответ 4
В ISTR есть плагин отладчика для Reflector.
Не использовал его сам, хотя я использовал TestDriven.net для отладки сторонней сборки с помощью Reflector:
weblogs.asp.net/nunitaddin
Ответ 5
Вот статья об отладке IL. В нем говорится, что вы не можете этого сделать, а затем расскажите о том, как это сделать. В комментариях также есть информация о том, как это сделать.