net - reflection c# español
Estado del método de captura usando Reflection (6)
La reflexión le dirá el tipo de parámetros que tiene un método, pero no ayudará a descubrir sus valores durante una invocación en particular. La reflexión no te dice nada sobre las variables locales.
Necesita el tipo de API que utiliza el depurador para acceder a este tipo de información.
¿Hay alguna manera de usar la reflexión .NET para capturar los valores de todos los parámetros / variables locales?
La reflexión no se usa para capturar información de la pila. Lee la Asamblea.
Es posible que desee echar un vistazo a StackTrace
http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx
Buen artículo aquí:
http://www.codeproject.com/KB/trace/customtracelistener.aspx
No creo que esto sea posible, puedes obtener el método y sus parámetros mirando el StackTrace.
System.Diagnostics.StackTrace sTrace = new System.Diagnostics.StackTrace(true);
for (Int32 frameCount = 0; frameCount < sTrace.FrameCount; frameCount++){
System.Diagnostics.StackFrame sFrame = sTrace.GetFrame(frameCount);
System.Reflection.MethodBase thisMethod = sFrame.GetMethod();
if (thisMethod == currentMethod){
if (frameCount + 1 <= sTrace.FrameCount){
System.Diagnostics.StackFrame prevFrame = sTrace.GetFrame(frameCount + 1);
System.Reflection.MethodBase prevMethod = prevFrame.GetMethod();
}
}
}
No sé cómo es posible usar la reflexión, pero mira el uso del tejido. SpringFramework.Net le permite definir puntos de corte que pueden interceptar llamadas a métodos. Otros probablemente lo hagan también.
Aquí hay un enlace al interceptor "BeforeAdvice" http://www.springframework.net/docs/1.2.0-M1/reference/html/aop.html#d0e8139
Puede obtener esta información utilizando la API de depuración de CLR, aunque no será un par de líneas simples para extraerla.
La gente de secondlife suspende scripts y los mueve entre servidores. Eso implica que deben capturar el estado de un script en ejecución, incluidos los valores de las variables en la pila de llamadas.
Su lenguaje de scripts se ejecuta en mono, una implementación de código abierto del tiempo de ejecución de .NET. Dudo que su solución se aplique al tiempo de ejecución regular de .NET, pero el video de la presentación sobre cómo lo hicieron (salte a la segunda mitad) podría ser interesante.