以编程方式转储调用堆栈

时间:2009-11-05 07:05:48

标签: c# .net debugging

寻找一种方法,以便在遇到一段代码时以编程方式转储调用堆栈和.net Win Forms应用程序。这是我之前没有遇到的事情,但会节省一些调试时间。

更新:忘记添加,这将为应用程序增加多少开销,即它会大大减慢它。

4 个答案:

答案 0 :(得分:57)

System.Environment.StackTrace

将以字符串形式提供当前堆栈。

如果您有更高级的需求,您也可以使用其他人指出的StackTrace课程。

答案 1 :(得分:12)

您可以使用:

StackTrace callStack = new StackTrace();

然后访问特定的堆栈框架:

StackFrame frame = callStack.GetFrame(1);

答案 2 :(得分:1)

http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx

来自MSDN:

using System.Diagnostics;

        StackTrace st = new StackTrace(true);
        for(int i =0; i< st.FrameCount; i++ )
        {
            // Note that high up the call stack, there is only
            // one stack frame.
            StackFrame sf = st.GetFrame(i);
            Console.WriteLine();
            Console.WriteLine("High up the call stack, Method: {0}",
                sf.GetMethod());

            Console.WriteLine("High up the call stack, Line Number: {0}",
                sf.GetFileLineNumber());
        }

答案 3 :(得分:-3)

实际上它不会减慢您的应用程序速度,因为不能生成callstack信息,它会在整个代码处理过程中出现。