ページ

2005年10月26日水曜日

DynamicMethod 用の DebuggerVisualizer

DebuggerVisualizer for DynamicMethod (Show me the IL) より


.NET Framework 2.0 で追加される DynamicMethod クラスによって簡単に、動的にメソッドを生成することができるようになります (まぁ、簡単とは言っても IL を直に書くようなものなのでそれなりの知識が必要ですが)。具体的な例は 「hello, world... LCG (Lightweight Code Gen) style!」 なんかを参照。
動的に生成した内容 (メソッドの内容) は単なるバイト配列なので、デバッグのときなんかにちょっと不便です。「Debugging LCG」 には、windbg を使って DynamicMethod の内容を見る方法が紹介されています。
上記の記事では VS2005 のデバッガ上で ildasm 風のコードで IL を確認できる DebuggerVisualizer が紹介されています。


この記事のコメントにもありますが、「Debugging Dynamically Generated Code (Reflection.Emit)」 で紹介されているように CLR と VS2005 は動的に生成されたコードのデバッグをちゃんとサポートしています。ただ、この記事の下のほうの "One caveat:" に 「2.0 で提供される light-weight-codegen (LCG) はモジュール、アセンブリ、型、メタデータなんかを作らずにお手軽にメソッドを作れる。必要なくなったら GC に回収もされるし。けど、LCG のデバッギングはサポートされてない。これは主にスケジュールの問題。debugging API は主に metadata API の拡張で、メタデータを持たない LCG のデバッギングはこのモデルにあわないんだよね。3.0 では直る予定」 なんて感じのことが書いてあります。なるほどなぁ。

0 件のコメント:

コメントを投稿