获得系统异常的详细信息
在.net中有一个非常重要的namespace System.Diagnostics,在这个namespace中我们可以与系统进程、事件日志和性能计数器进行交互(MSDN)。
在他的下面包含着两个class:StackTrace 和 StackFrame。StackTrace:表示一个堆栈跟踪,它是一个或多个堆栈帧的有序集合。StackFrame:提供关于 StackFrame(表示当前线程的调用堆栈中的一个函数调用)的信息。(MSDN)。
一般在应用系统中我们很有可能不是在当前方法去捕获异常,或者系统中的有些异常可能使我们没有处理的,然后我们来个集中处理,捕获所有的系统异常。系统中每执行一个方法都会将相关的信息压入到Stack中,这时我们就可以用上面的两个类来了解异常的更多详细信息!
下面我们用一个示例来演示怎样得到捕获的系统异常的详细信息。
private void DisplayExceptionInfo(Exception e)
{
//定义堆栈 ,从出现异常的地方开始跟踪一直到调用本方法的方法
StackTrace st = new StackTrace(e,true);
int i;
//遍历堆栈中帧
for(i=0;i<=st.FrameCount;i++)
{
StackFrame sf;
sf = st.GetFrame(i);
MemberInfo mi;
//得到方法
mi= sf.GetMethod();
string res;
//这个方法的命名空间
res = mi.DeclaringType.Namespace + ".";
//class名
res = res + mi.DeclaringType.Name + ".";
res = res + mi.Name;
//取得文件名(物理路径)、行号,列号
if(sf.GetFileName() != string.Empty)
{
res = res + sf.GetFileName() + ",Line" + sf.GetFileLineNumber() + ",Col" + sf.GetFileColumnNumber();
}
}
}