2010-04-23 14 views
7

quiero conseguir un registro detallado sobre mi seguimiento de la pila. Puedo obtener un StackFrame y luego el método y luego obtener todos los parámetros de ese método. Del mismo modo que el siguiente código:¿Puedo obtener las variables locales del método a través de un seguimiento de pila en C#?

  StackTrace st = new StackTrace(); 
      StackFrame[] sfs = st.GetFrames(); 
      foreach (StackFrame sf in sfs) 
      { 
       MethodBase method = sf.GetMethod(); 
       ParameterInfo[] pis = method.GetParameters(); 
       foreach (ParameterInfo pi in pis) 
       { 
         .... 
       } 
       Console.WriteLine(method.Name); 
      } 

Pero cómo podría conseguir el variables locales infomación dentro de un método?

Podría alguien arrojar alguna luz sobre mí?

Muchas gracias.

Respuesta

3

Es posible que desee ver en LocalVariableInfo.

Ejemplo FOM MSDN // Obtener información cuerpo del método.

MethodInfo mi = typeof(Example).GetMethod("MethodBodyExample"); 
MethodBody mb = mi.GetMethodBody(); 
Console.WriteLine("\r\nMethod: {0}", mi); 

// Display the general information included in the 
// MethodBody object. 
Console.WriteLine(" Local variables are initialized: {0}", 
    mb.InitLocals); 

foreach (LocalVariableInfo lvi in mb.LocalVariables) 
{ 
    Console.WriteLine("Local variable: {0}", lvi); 
} 
+0

Gracias Filip. Solo otra pregunta, ¿podría obtener el nombre/tipo/valor de las variables locales? – smwikipedia

+1

@smwikipedia: no, no puedes :) al menos no en el código administrado. Si usara las API de creación de perfiles no administradas, podría funcionar, pero no es una tarea fácil. –

+1

No tendría ningún sentido para obtener el valor de la variable local ya que están inspeciting fuera de alcance. –

Cuestiones relacionadas