2012-04-11 99 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