比如void a(int p)
{
   b();
}void b()
{
   //在这写什么代码能够取得调用堆栈里 方法a中参数p的值?
}执行 a(1);  在方法b里写什么代码能输出调用堆栈里方法a中参数p的值?谢谢

解决方案 »

  1.   

    把p传递给 b();或通过static变量
      

  2.   

    void a(int p) 

      b(p); 
    } void b(int p

      //在这写什么代码能够取得调用堆栈里 方法a中参数p的值? 

      

  3.   

    最简单直接的方法就是传参数:
    void a(int p)
    {
      b(p);
    }void b(int p)
    {
      //得到值
      

  4.   

    我只拿到了参数 类型方面的东东, 实例的想不到, 一切皆有可能, 基址偏移?using System;
    using System.Diagnostics;
    using System.Reflection;namespace stacktrace
    {
      class program
      {
        static void Main()
        {
          program p = new program();
          p.a(1);
        }
        /// 直接调用 b , 编译器优化导致调用堆栈上无 a 的调用
        int a(int p)
        {
          b();
          return p++;
        }
        
        void b()
        {
          //在这写什么代码能够取得调用堆栈里 方法a中参数p的值?
          StackFrame fr = new StackFrame(1);
          MethodBase mb = fr.GetMethod();
          Console.WriteLine(mb.GetType());
          Console.WriteLine(mb.Name);
          ParameterInfo[] pars = mb.GetParameters();
          foreach (ParameterInfo p in pars) 
          {
            Console.Write(p.ParameterType);
            Console.Write('\t');
            Console.WriteLine(p.Name);
          }
        }
      }

      

  5.   

    谢谢大家。 Dobzhansky 的答案最接近。 不过我的提问是如何取得参数值。 请大家再帮帮我吧
      

  6.   

    补充一下方法 a是webservice的WebMethod。是不是可以通过webservice的序列化特性得到参数值呢? 有兴趣的朋友帮我一起研究下吧
      

  7.   

    visual studio堆栈列表里显示了参数的值,谁知道它是怎么做的啊?