获得系统异常的详细信息

        在.net中有一个非常重要的namespace System.Diagnostics,在这个namespace中我们可以与系统进程、事件日志和性能计数器进行交互(MSDN)。
        在他的下面包含着两个class:StackTrace 和 StackFrameStackTrace:表示一个堆栈跟踪,它是一个或多个堆栈帧的有序集合。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();

    }
   }
  }
     

posted @ 2004-03-30 11:33  agaric  阅读(1551)  评论(1编辑  收藏  举报