2010-04-23 4 views
7

Ich möchte ein detailliertes Protokoll über meine Stack-Trace erhalten. Ich kann einen StackFrame und dann die Methode abrufen und dann alle Parameter dieser Methode abrufen. So wie dem folgenden Code:Kann ich die Methode lokale Variablen durch eine Stapelüberwachung in C# abrufen?

  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); 
      } 

Aber wie konnte ich die lokale Variablen Infomationen innerhalb einer Methode erhalten?

Könnte jemand etwas Licht auf mich werfen?

Vielen Dank.

Antwort

3

Vielleicht möchten Sie in LocalVariableInfo suchen.

Beispiel für MSDN // Get method body information.

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

Danke Filip. Nur eine weitere Frage, könnte ich den Namen/Typ/Wert der lokalen Variablen bekommen? – smwikipedia

+1

@smwikepedia: Nein, Sie können nicht :) zumindest nicht in verwaltetem Code. Wenn Sie die APIs für nicht verwaltete Profilerstellung verwenden würden, könnte es funktionieren, aber es ist kein einfaches Stück Arbeit. –

+1

Es wäre nicht sinnvoll, den Wert der lokalen Variablen zu ermitteln, da Sie sie außerhalb des Gültigkeitsbereichs überprüfen. –

Verwandte Themen