代码之家  ›  专栏  ›  技术社区  ›  Smashery

调用堆栈中的“[轻量级函数]”

  •  17
  • Smashery  · 技术社区  · 15 年前

    我正在调试一个程序(VS2008),我正在逐步执行代码行。我遇到了一个调用委托函数的行,我试图单步执行它。但是,没有像我预期的那样单步执行该方法,而是绕过了该方法,使用调试器而不是单步执行我假定的委托调用的函数。在调用堆栈中,我期望委托方法所在的行用文本灰显。 [Lightweight Function] .

    “轻量级功能”部分是什么意思?是否有方法单步执行此函数?

    3 回复  |  直到 14 年前
        1
  •  17
  •   bobbymcr    15 年前

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

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

        2
  •  3
  •   Anton Gogolev    15 年前

    看起来这是一个 DynamicMethod .参见 this 为了一些洞察力。

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

        3
  •  3
  •   user480622    14 年前

    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
    

    纯的

    [轻量功能]

    对动态方法的委托 被称为。