Подтвердить что ты не робот

Отладчик кода уровня IL

Есть ли отладчик уровня IL в виде плагина VS или автономного приложения?

Отладчик Visual Studios замечательный, но он позволяет вам отлаживать либо уровень кода HLL, либо язык ассемблера, вы не можете отлаживать IL. Похоже, что в некоторых ситуациях было бы полезно иметь возможность отлаживать уровень IL.

В частности, это может быть полезно при отладке проблемы в коде, в котором у вас нет источника.

Можно утверждать, что на самом деле полезно отлаживать IL, когда у вас нет источника, но в любом случае.

4b9b3361

Ответ 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. В нем говорится, что вы не можете этого сделать, а затем расскажите о том, как это сделать. В комментариях также есть информация о том, как это сделать.