2012-04-11 21 views
5

La stampa della traccia dello stack non è così difficile quando si utilizza System.Diagnostics. Mi chiedo se è possibile stampare i VALORI dei parametri passati a ciascun metodo sulla traccia dello stack, e se no perché no.Stampa i valori dei parametri sulla traccia dello stack

Ecco il mio codice preliminare:

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? 
      } 
     } 
    } 
} 

Grazie in anticipo.

+0

Non funzionerà: 'MethodInfo.GetParameters' restituisce i parametri dichiarati, non i valori degli argomenti ... –

+0

@ThomasLevesque: Ok, quindi questa particolare appraoch potrebbe non funzionare. C'è un altro che lo farà? – user420667

+0

Solo un debugger ha un colpo alle informazioni necessarie, disponibili dal file .pdb. Tuttavia, da quel momento, il programma non può eseguire il debug di se stesso e le informazioni sono accurate solo per la build di Debug. L'ottimizzazione delle chiamate di metodo è un obiettivo di ottimizzazione del jitter molto importante. Non puoi far funzionare questo. –

risposta

2

Non è possibile farlo, almeno non con le classi fornite da System.Diagnostics. La classe StackFrame non fornisce un modo per accedere ai valori degli argomenti (MethodBase.GetParameters fornisce informazioni sui parametri dichiarati, ad esempio i loro nomi e tipi, ma non i valori degli argomenti effettivi)

Penso che sia possibile farlo con le API di debug CLR, ma probabilmente non da C#

+0

+1 per il riferimento API di debug CLR. Non vedo perché questo non sarebbe reso facilmente disponibile. – user420667

Problemi correlati