2008-08-12 266 views
22

是否有VS插件或獨立應用程序形式的任何IL級調試器?IL級代碼調試器

Visual Studio的調試器非常棒,但它允許您在HLL代碼級別或彙編語言上調試,但不能調試IL。 似乎在某些情況下,有機會在IL級別進行調試會很有用。

特別是,在代碼中調試問題時可能會有所幫助。

這是有爭議的,如果它實際上是有用的調試IL當你沒有源,但無論如何。

回答

19

執行此操作的最佳方法是使用ILDASM反彙編託管二進制文件,該二進制文件將生成IL指令。然後使用ILASM以調試模式重新編譯IL源代碼,當您啓動Visual Studio調試器時,您將能夠遍歷原始IL。

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

我已經寫了一篇博客文章,在這個話題: How to debug Compiler Generated code

+2

這是一種很好的方法,但不能用於簽名程序集。 – axk 2008-09-10 20:27:09

0

ISTR有一個反射器的調試插件。

沒有用它自己,雖然我已經使用TestDriven.net調試一個第三方組件,反射器的幫助:

weblogs.asp.net/nunitaddin

0

這裏是一個article約IL調試。它說你不能這樣做,然後談論如何做到這一點。關於這樣做的評論也有一些信息。

1

Debug Companion VS插件似乎正是我所尋找的,除了它不會在我的解決方案中看到庫項目。只有當我向解決方案添加控制檯獲勝應用程序時,纔會在項目列表中出現一些內容。

對我來說,反編譯/編譯方法的問題是我調試的代碼不是我的代碼。我可以反編譯它,但我認爲沒有辦法簽署重新編譯的程序集,以便它被加載而不是原來的。

由於我遇到了特殊的問題,只是在彙編語言級調試它並獲得拋出異常的方法的調用堆棧以及調用該方法的參數就足夠了。

1

這裏是我用來在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 
+0

您是否在Visual Studio環境中的後期構建步驟中運行此操作? – 2015-04-24 22:07:20