الحصول على قيم المعلمات من كومة إطار في .الشبكة ؟

StackOverflow https://stackoverflow.com/questions/75076

  •  09-06-2019
  •  | 
  •  

سؤال

وأود أن تكون قادرة على الحصول على كل قيم المعلمة من الإطار المكدس في .صافي.قليلا مثل كيف كنت قادرا على رؤية القيم في مكدس الاستدعاءات عندما تكون في مصحح الأخطاء Visual Studio.توجهي ركزت على استخدام StackFrame الدرجة ثم تعكس أكثر ParameterInfo الصفيف.لقد كان النجاح مع انعكاس الخصائص ، ولكن هذا هو إثبات أصعب قليلا.

هل هناك نهج لتحقيق هذا ؟

مدونة حتى الآن يبدو مثل هذا:

class Program
{
    static void Main(string[] args)
    {
        A a = new A();
        a.Go(1);
    }
}

public class A
{
    internal void Go(int x)
    {
        B b = new B();
        b.Go(4);
    }
}

public class B
{
    internal void Go(int y)
    {
        Console.WriteLine(GetStackTrace());

    }
    public static string GetStackTrace()
    {
        StringBuilder sb = new StringBuilder();
        StackTrace st = new StackTrace(true);
        StackFrame[] frames = st.GetFrames();

        foreach (StackFrame frame in frames)
        {
            MethodBase method = frame.GetMethod();

            sb.AppendFormat("{0} - {1}",method.DeclaringType, method.Name);
            ParameterInfo[] paramaters = method.GetParameters();
            foreach (ParameterInfo paramater in paramaters)
            {
                sb.AppendFormat("{0}: {1}", paramater.Name, paramater.ToString());
            }
            sb.AppendLine();
        }
        return sb.ToString();
    }
}

الإخراج يبدو مثل هذا:

SfApp.B - GetStackTrace
SfApp.B - Go
y: Int32 y
SfApp.A - Go
x: Int32 x
SfApp.Program - Main
args: System.String[] args

أود أن تبدو مثل هذا:

SfApp.B - GetStackTrace
SfApp.B - Go
y: 4
SfApp.A - Go
x: 1
SfApp.Program - Main

فقط قليلا من السياق ، خطتي كانت محاولة استخدام هذا عندما أنا رمي بلدي استثناءات.سوف ننظر في الاقتراحات الخاصة بك في المزيد من التفاصيل ومعرفة ما إذا كنت يمكن أن نرى أنه من المناسب.

هل كانت مفيدة؟

المحلول

يبدو أنه لا يمكن أن يتم بهذه الطريقة.وسوف نقدم فقط المعلومات الوصفية عن طريقة ومعالمها.لا القيمة الفعلية في وقت مكدس الاستدعاءات.

تشير بعض الناشئة الصفوف من ContextBoundObject واستخدام IMessageSink ليتم إخطار من جميع استدعاءات الأسلوب و قيم المعلمات.هذا هو تستخدم عادة .NET Remoting.

اقتراح آخر قد يكون كتابة المصحح.هذا هو كيف IDE يحصل على المعلومات.مايكروسوفت Mdbg والتي يمكنك الحصول على شفرة المصدر.أو كتابة CLR التعريف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top