2009-08-31 7 views
13

Estoy depurando un programa (VS2008), y estaba pasando por líneas de código. Encontré una línea donde se llamaba a una función de delegado e intenté entrar en ella. Sin embargo, en lugar de entrar en el método como esperaba, se omitió el método, con el depurador entrando en lo que supongo que es una función llamada por el delegado. En la pila de llamadas, la línea donde esperaba que el método delegado esté atenuado aparece en el texto [Lightweight Function]."[Función de peso liviano]" en la pila de llamadas

¿Qué significa la función "Función ligera"? ¿Hay alguna manera de entrar en esta función?

+16

Vaya, primero Visual Studio me dice que "este código fue generado por una herramienta" y ahora está llamando a mis funciones "ligeras"? ¡Qué actitud! :) –

+0

Verifique la configuración de compilación, quizás las optimizaciones estén habilitadas y las funciones puedan optimizarse (en línea) – CodingBarfield

Respuesta

12

Creo que una función ligera se refiere a un DynamicMethod, es decir, uno que se emite durante el tiempo de ejecución, se usa y luego se descarga.

Esta publicación de blog está relacionada con Iron Python, pero la información debe ser buena para cualquier proyecto .NET: Viewing Emitted IL. El autor le muestra cómo usar un depurador de nivel inferior (windbg.exe) para ver estas "funciones livianas".

3

Parece que es DynamicMethod. Consulte this para obtener información.

No estoy seguro acerca de entrar en un método dinámico, sin embargo.

2

pila de llamadas para DynamicMethod (tanto en depuración y liberación modo):

[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 

Pure

[Función Ligera]

marco se puede observar cuando un delegado a un método dinámico es llamado.

Cuestiones relacionadas