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

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

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

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

Это спорно, если это на самом деле полезно для отладки IL, когда у вас нет источника, но в любом случае.

12.08.2008 20:06:13
5 ОТВЕТОВ

Лучший способ сделать это - использовать ILDASM для дизассемблирования управляемого двоичного файла, который будет генерировать инструкции IL. Затем скомпилируйте исходный код IL в режиме отладки, используя ILASM, когда вы запустите отладчик Visual Studio, вы сможете пройти по сырому IL.

  1. ildasm foo.exe /OUT=foo.exe.il /SOURCE
  2. ilasm foo.exe.il /DEBUG

Я написал сообщение в блоге на эту тему по адресу: Как отлаживать сгенерированный компилятором код .

25
21.07.2017 18:42:11
Это хороший подход, но вы не можете использовать его для подписанной сборки.
axk 10.09.2008 20:27:09

ISTR есть плагин отладчика для Reflector.

Сам не использовал, хотя я использовал TestDriven.net для отладки сторонней сборки с помощью Reflector:

weblogs.asp.net/nunitaddin

0
23.01.2013 04:57:36

Вот статья об отладке IL. Он говорит, что вы не можете сделать это, а затем говорит о том, как это сделать. В комментариях также есть информация о том, как это сделать.

0
12.08.2008 20:38:34

Плагин Debug Companion VS кажется именно тем, что я искал, за исключением того, что он не увидит библиотечный проект в моем решении. Только когда я добавил консольное приложение win в решение, что-то появилось в этом списке проектов.

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

С конкретной проблемой у меня оказалось, что достаточно просто отладить ее на уровне ассемблера и получить стек вызовов метода, который вызывал исключение, и параметров, с которыми был вызван метод.

1
19.08.2008 21:26:17

Вот файл .BAT, который я использую для отладки IL-ассемблера в Visual Studio. Созданный файл .IL.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
3
25.04.2015 04:12:08
Вы запускаете это на этапе пост-сборки в вашей среде Visual Studio?
Shahzad Qureshi 24.04.2015 22:07:20
В настоящее время я вызываю из командной строки. Тем не менее, я не вижу никаких технических причин, почему это не сработает. IIRC, я уже тестировал на этапе пост-сборки, и он работает, как ожидалось.
BSalita 25.04.2015 04:09:53
Вы можете заменить %NAME_ONLY%с %~dpn1и избавиться от первой линии
Adassko 29.04.2016 20:47:06