21

プログラム (VS2008) をデバッグしていて、コード行をステップ実行していました。デリゲート関数が呼び出されている行に出くわし、その行にステップ インしようとしました。ただし、期待どおりにメソッドにステップインするのではなく、メソッドはバイパスされ、代わりに、デリゲートによって呼び出される関数であると想定されるものにデバッガーがステップインしました。コール スタックで、デリゲート メソッドがあると予想していた行は、テキストでグレー表示されています[Lightweight Function]

「軽量機能」の部分とは?この関数にステップインする方法はありますか?

4

3 に答える 3

20

軽量関数はDynamicMethod、つまり実行時に発行され、使用され、アンロードされる関数を指すと思います。

このブログ投稿は Iron Python に関連していますが、この情報はどの .NET プロジェクトにも役立つはずです: Viewing Emitted IL . 著者は、低レベルのデバッガー (windbg.exe) を使用してこれらの "軽量関数" を確認する方法を示します。

于 2009-08-31T05:52:24.870 に答える
4

これはDynamicMethodのようです。いくつかの洞察については、これを参照してください。

ただし、動的メソッドにステップインするかどうかはわかりません。

于 2009-08-31T05:53:59.687 に答える
3

DynamicMethod のコールスタック (デバッグ モードとリリース モードの両方):

[Lightweight Function]  
[Native to Managed Transition]  
mscorlib.dll!System.Reflection.Emit.DynamicMethod.Invoke(object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] parameters, System.Globalization.CultureInfo culture) + 0x199 bytes

ピュア

【軽量機能】

フレームは、動的メソッドへのデリゲートが呼び出されたときに観察できます。

于 2010-10-28T12:53:06.633 に答える