【发布时间】:2010-12-13 07:46:09
【问题描述】:
正在寻找一种方法,以便在遇到一段代码时以编程方式转储调用堆栈和 .net Win Forms 应用程序。这是我以前没有遇到过的东西,但可以节省一些调试时间。
更新:忘了补充,这会给应用程序增加多少开销,即它会大大减慢速度。
【问题讨论】:
正在寻找一种方法,以便在遇到一段代码时以编程方式转储调用堆栈和 .net Win Forms 应用程序。这是我以前没有遇到过的东西,但可以节省一些调试时间。
更新:忘了补充,这会给应用程序增加多少开销,即它会大大减慢速度。
【问题讨论】:
System.Environment.StackTrace
会给你当前的堆栈作为一个字符串。
如果您有更高级的需求,您也可以使用其他人指出的 StackTrace 类。
【讨论】:
您可以使用:
StackTrace callStack = new StackTrace();
然后访问特定的堆栈帧:
StackFrame frame = callStack.GetFrame(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());
}
【讨论】:
实际上它不会减慢您的应用程序,因为调用堆栈信息不一定会生成,它存在于您的代码的整个处理过程中。
【讨论】: