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

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

28 голосов
/ 13 августа 2008

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

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

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

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

Ответы [ 5 ]

23 голосов
/ 13 августа 2008

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

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

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

2 голосов
/ 24 апреля 2015

Вот файл .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
1 голос
/ 20 августа 2008

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

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

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

0 голосов
/ 13 августа 2008

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

0 голосов
/ 13 августа 2008

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

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

weblogs.asp.net / nunitaddin

...