使用C#过程中,除了通过try catch中的exception来打印当前的堆栈信息,我们还可以主动通过System.DiagnosticsStackTrace这个类来主动打印出堆栈信息。
代码:
using System;
using System.Diagnostics;
namespace Test2
{
class Program
{
static void Main(string[] args)
{
DebugInfo db = new DebugInfo();
Console.WriteLine(db.Test1());
}
}
class DebugInfo
{
public String Test1()
{
string info = null;
//设置为true,这样才能捕获到文件路径名和当前行数,当前行数为GetFrames代码的函数,也可以设置其他参数
StackTrace st = new StackTrace(true);
//得到当前的所以堆栈
StackFrame[] sf = st.GetFrames();
for (int i = 0; i < sf.Length; ++i)
{
info = info + "\r\n" + " FileName=" + sf[i].GetFileName() + " fullname=" + sf[i].GetMethod().DeclaringType.FullName + " function=" + sf[i].GetMethod().Name + " FileLineNumber=" + sf[i].GetFileLineNumber();
}
return info;
}
}
}
结果:
需要注意的是,无论是Debug还是Release模式,new StackTrace(true)的时候设置为true,并且exe路径下存在pdb编译信息文件,这才可以显示当前路径文件名和行数。