30

VS プラグインまたはスタンドアロン アプリケーションの形式の IL レベルのデバッガーはありますか?

Visual Studio のデバッガーは優れていますが、HLL コード レベルまたはアセンブリ言語のいずれかでデバッグできます。IL をデバッグすることはできません。状況によっては、IL レベルでデバッグする機会があると便利なようです。

特に、ソースがないコードの問題をデバッグする場合に役立つ場合があります。

ソースがないときに IL をデバッグすることが実際に役立つかどうかは議論の余地がありますが、とにかく。

4

5 に答える 5

25

これを行う最善の方法は、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 .

于 2008-08-12T20:10:38.653 に答える
3

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
于 2015-04-24T17:37:01.827 に答える
1

Debug Companion VS プラグインは、ソリューションにライブラリ プロジェクトが表示されないことを除けば、まさに私が探していたものと思われます。コンソール ウィン アプリケーションをソリューションに追加したときにのみ、プロジェクトのリストに何かが表示されました。

私にとっての逆コンパイル/コンパイル アプローチの問題は、デバッグしていたコードが自分のコードではないことでした。とにかく逆コンパイルすることもできましたが、再コンパイルされたアセンブリに署名して、元のアセンブリの代わりにロードされるようにする方法はないと思います。

特定の問題については、アセンブリ言語レベルでデバッグするだけで十分であり、例外をスローしていたメソッドの呼び出しスタックとメソッドが呼び出されたパラメーターを取得するだけで十分であることがわかりました。

于 2008-08-19T21:26:17.937 に答える
0

ISTR Reflector 用のデバッガー プラグインがあります。

私自身は使用しませんでしたが、TestDriven.net を使用して Reflector を使用してサードパーティのアセンブリをデバッグしました。

weblogs.asp.net/nunitaddin

于 2008-08-12T20:24:21.310 に答える
0

ILのデバッグに関する記事はこちらです。それはできないと言ってから、それを行う方法について話します。コメントにもそれを行うことに関するいくつかの情報があります。

于 2008-08-12T20:38:34.947 に答える