“ [轻量功能]在调用堆栈中

问题描述 投票:18回答:3

我正在调试程序(VS2008),并且正在逐步执行代码行。我碰到了一条正在调用委托函数的行,然后尝试进入该行。但是,没有像我期望的那样进入该方法,而是绕过了该方法,调试器改为进入了我认为是委托调用的函数。在调用堆栈中,我期望委托方法的行将以灰色显示,文字为[Lightweight Function]

“轻量功能”部分是什么意思?有没有办法进入此功能?

c# .net visual-studio-2008 callstack
3个回答
17
投票

我相信轻量级函数是指DynamicMethod,即在运行时发出,使用然后卸载的函数。

此博客文章与Iron Python有关,但是该信息对于任何.NET项目都应该有用:Viewing Emitted IL。作者向您展示了如何使用较低级别的调试器(windbg.exe)来查看这些“轻量级函数”。


4
投票

看起来像是DynamicMethod。有关详细信息,请参见this

不过,我不确定是否要采用动态方法。


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

[轻量级功能]

当调用动态方法的委托时,可以观察到帧。

© www.soinside.com 2019 - 2024. All rights reserved.