【问题标题】:Can I get the method local variables through a stack trace in C#?我可以通过 C# 中的堆栈跟踪获取方法局部变量吗?
【发布时间】:2010-04-23 06:38:32
【问题描述】:

我想获取有关我的堆栈跟踪的详细日志。我可以先获取 StackFrame,然后获取方法,然后获取该方法的所有参数。就像下面的代码:

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

但我如何才能在方法中获取局部变量信息?

有人能帮我解释一下吗?

非常感谢。

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    您可能想查看LocalVariableInfo

    来自 MSDN 的示例 // 获取方法体信息。

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

    【讨论】:

    • 谢谢菲利普。还有一个问题,我可以得到局部变量的名称/类型/值吗?
    • @smwikipedia: 不,你不能 :) 至少在托管代码中不行。如果您要使用非托管分析 API,它可以工作,但这不是一件容易的工作。
    • 获取局部变量的值没有任何意义,因为您正在检查它超出范围。
    • 谢谢,菲利普。我只想像调试器一样记录和检查调用堆栈信息。
    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2019-11-05
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多