2012-04-11 26 views
5

Imprimir la traza de la pila no es tan difícil cuando usas System.Diagnostics. Me pregunto si es posible imprimir los VALORES de los parámetros pasados ​​a cada método en el seguimiento de la pila, y si no, por qué no.Imprime los valores de los parámetros en la pila

Aquí está mi código preliminar:

public static class CallStackTracker 
{ 
    public static void Print() 
    { 
     var st = new StackTrace(); 
     for (int i = 0; i < st.FrameCount; i++) 
     { 
      var frame = st.GetFrame(i); 
      var mb = frame.GetMethod(); 
      var parameters = mb.GetParameters(); 
      foreach (var p in parameters) 
      { 
       // Stuff probably goes here, but is there another way? 
      } 
     } 
    } 
} 

Gracias de antemano.

+0

No funcionará: 'MethodInfo.GetParameters' devuelve los parámetros declarados, no los valores de argumento ... –

+0

@ThomasLevesque: Bueno, este appraoch puede no funcionar. ¿Hay otro que lo haga? – user420667

+0

Solo un depurador tiene una oportunidad para obtener la información necesaria, disponible desde el archivo .pdb. Sin embargo, a partir de ahí, el programa no puede depurarse solo y la información solo es precisa para la compilación Debug. La optimización de llamadas de método es un objetivo muy importante del optimizador de fluctuación de fase. No puedes hacer que esto funcione. –

Respuesta

2

No puede hacer eso, al menos no con las clases provistas por System.Diagnostics. La clase StackFrame no proporciona una forma de acceder a los valores del argumento (MethodBase.GetParameters proporciona información sobre los parámetros declarados, p. Ej. Sus nombres y tipos, pero no los valores de los argumentos reales)

Creo que es posible hacerlo con las API de depuración de CLR, pero probablemente no de C#

+0

+1 para la referencia de API de depuración CLR. No veo por qué esto no estaría fácilmente disponible. – user420667

Cuestiones relacionadas