C#学习笔记系列
第一章 【C#学习笔记】【StackTrace】
前言
使用StackTrace类来获取调用方法的堆栈信息。
一、StackTrace介绍
- 其中调用GetFrame得到栈空间,参数index 表示栈空间的级别,0表示当前栈空间,1表示上一级的栈空间,依次类推;
- 除了可以获取方法信息外,还可以调用StackFrame类的成员函数,在运行时得到代码的文件信息及行号和列号等;
- 利用StackTrace 属性获得错误的函数被调用的堆栈信息,以及文件的位置(文件名,行号),并将错误信息保存在一个.config的文件里;
- 如果是try{}catch(Exception ex){},是可以通过ex.StackTrace()直接获取到堆栈信息,但如果是其他场景,就需要通过下面的代码来获取了。
二、使用方法
代码如下(示例):
public static StringBuilder OutputCallStack()
{
StringBuilder stackStrs = new StringBuilder();
//如果为 true,则捕获文件名、行号和列号;否则为 false。
System.Diagnostics.StackTrace stack = new System.Diagnostics.StackTrace(true);
//调用GetFrame得到栈空间
System.Diagnostics.StackFrame[] stackFrames = stack.GetFrames();
//从1开始是为了不显示当前函数的堆栈,从目标函数开始
for (int i = 1; i < stackFrames.Length; i++)
{
//参数index 表示栈空间的级别,0表示当前栈空间,1表示上一级的栈空间,依次类推
System.Reflection.MethodBase? method = stackFrames[i].GetMethod();
//堆栈信息 类名.方法名; 文件名.行数
stackStrs.AppendLine($"[CALL STACK][{i}]: 【Method:{method?.DeclaringType?.FullName}.{method?.Name}】; 【File:{stackFrames[i].GetFileName()}.{stackFrames[i].GetFileLineNumber()}】");
}
return stackStrs;
结果打印
三、源码链接
总结
智商在于学习,成功在于积累