IL级代码调试器

时间:2008-08-12 20:06:14

标签: .net debugging il

是否有VS插件或独立应用程序形式的IL级调试器?

Visual Studio的调试器很棒,但它允许您在HLL代码级别或汇编语言上进行调试,您无法调试IL。 在某些情况下,似乎有机会在IL级别进行调试。

特别是在调试代码中没有源代码的问题时可能会有所帮助。

如果在没有源代码的情况下调试IL实际上是有用的,无论如何都是有争议的。

5 个答案:

答案 0 :(得分:23)

执行此操作的最佳方法是使用ILDASM反汇编托管二进制文件,这将生成IL指令。然后使用ILASM在调试模式下重新编译IL源代码,当您启动Visual Studio调试器时,您将能够逐步执行原始IL。

  1. ildasm foo.exe /OUT=foo.exe.il /SOURCE
  2. ilasm foo.exe.il /DEBUG
  3. 我写了一篇关于这个主题的博文: How to debug Compiler Generated code

答案 1 :(得分:2)

这是我用来在Visual Studio中调试IL汇编程序的.BAT文件。创建的.IL.IL文件包含原始源代码行和生成的IL汇编程序行,但不显示jitted机器代码。我将批处理文件命名为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

答案 2 :(得分:1)

Debug Companion VS插件似乎正是我想要的,除了它在我的解决方案中看不到库项目。只有当我向解决方案添加了一个控制台获胜应用程序时,才会在该项目列表中显示一些内容。

对我来说反编译/编译方法的问题是我调试的代码不是我的代码。我本可以反编译它但我认为没有办法签署重新编译的程序集,以便加载它而不是原始程序集。

根据我遇到的特殊问题,我发现只需在汇编语言级别调试它就可以获得抛出异常的方法的调用堆栈以及调用该方法的参数。

答案 3 :(得分:0)

ISTR有一个用于Reflector的调试器插件。

我自己没有使用它,虽然我已经使用TestDriven.net在Reflector的帮助下调试第三方程序集:

weblogs.asp.net/nunitaddin

答案 4 :(得分:0)

这是关于IL调试的article。它说你做不到,然后谈论如何做到这一点。关于这样做的评论中也有一些信息。