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