我正在调试一个程序(VS2008),并且我正在逐步执行代码行。我遇到了正在调用委托函数的一行,我试图进入它。然而,不是像我预期的那样进入该方法,而是绕过了该方法,而调试器则进入了我认为是委托调用的函数。在调用堆栈中,我期望委托方法所在的行与 text 一起显示为灰色[Lightweight Function]
。
“轻量级功能”部分是什么意思?有没有办法进入这个功能?
我正在调试一个程序(VS2008),并且我正在逐步执行代码行。我遇到了正在调用委托函数的一行,我试图进入它。然而,不是像我预期的那样进入该方法,而是绕过了该方法,而调试器则进入了我认为是委托调用的函数。在调用堆栈中,我期望委托方法所在的行与 text 一起显示为灰色[Lightweight Function]
。
“轻量级功能”部分是什么意思?有没有办法进入这个功能?
我相信轻量级函数是指DynamicMethod,即在运行时发出、使用然后卸载的函数。
这篇博文与 Iron Python 相关,但该信息应该适用于任何 .NET 项目:查看 Emitted IL。作者向您展示了如何使用较低级别的调试器(windbg.exe)来查看这些“轻量级函数”。
看起来这是一个DynamicMethod。请参阅this以获得一些见解。
不过,我不确定是否要采用动态方法。
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
纯的
【轻量级功能】
调用动态方法的委托时可以观察到框架。