2012-04-11 162 views
5

使用System.Diagnostics打印堆棧跟蹤並不困難。我想知道是否可以將傳遞給每個方法的參數的VALUES打印到堆棧跟蹤上,如果不是的話。打印堆棧跟蹤參數的值

這裏是我的初步代碼:

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

在此先感謝。

+0

它不會工作:'MethodInfo.GetParameters'返回聲明的參數,而不是參數值... – 2012-04-11 22:04:02

+0

@ThomasLevesque:好的,所以這個特定的appraoch可能無法正常工作。還有其他嗎? – user420667 2012-04-11 22:07:23

+0

只有調試器纔有必要的信息,可從.pdb文件獲得。然而,從那裏快速下降,一個程序不能自行調試,並且這些信息僅對於調試構建而言是準確的。優化方法調用是一個非常重要的抖動優化器目標。你無法完成這項工作。 – 2012-04-11 23:25:44

回答

2

你不能那樣做,至少不要用System.Diagnostics提供的類。 StackFrame類沒有提供訪問參數值的方法(MethodBase.GetParameters提供了有關聲明參數的信息,例如它們的名稱和類型,但不包括實際參數的值)

我認爲可以這樣做CLR調試API,但可能不是來自C#

+0

針對CLR調試API參考的+1。我不明白爲什麼這不容易獲得。 – user420667 2012-04-11 22:20:10