获取导致异常的表单名称,方法名称和更多详细信息

时间:2013-12-30 10:40:50

标签: c# winforms error-handling error-reporting

我试图通过在Program.cs文件中使用以下代码来捕获未处理的异常。

我试图创建一个包含错误所需信息的字符串。所以我可以识别错误发生的代码中的Point。

我的问题是有一种方法可以在编译和混淆后从错误对象获取以下详细信息

  • 发生错误的表单名称

  • 触发错误的代码行数

  • 以及确定精确代码行的任何其他有用信息

    private static void OnUnhandledException(Object sender, UnhandledExceptionEventArgs e)
        {        
       string error;
    
              error = e.Exception.Message + "|" + e.Exception.TargetSite;
          }
    
            private static void OnGuiUnhandedException(object sender, System.Threading.ThreadExceptionEventArgs e)
            {
    
    
       string error;
    
              error = e.Exception.Message + "|" + e.Exception.TargetSite;
    
            } 
    

3 个答案:

答案 0 :(得分:0)

我已经编写了以下代码段,并且已经将它用于我的所有应用。它遍历所有内部异常和包含大部分所需信息的异常的堆栈跟踪:

public static string ExceptionTree(Exception ex)
{
    // find all inner exceptions
    StringBuilder strbException = new StringBuilder();
    do
    {
        strbException.AppendLine("Exception: " + ex.Message);
        strbException.AppendLine("Stack Trace: " + ex.StackTrace);
        strbException.AppendLine();

        ex = ex.InnerException;
    }
    while (ex != null);

    return strbException.ToString();
}

答案 1 :(得分:0)

只需使用> System.Environment.StackTrace

try
{
    //Exception

    throw new Exception("An error has happened");
}
catch (Exception ex)
{
     //Open the trace
     System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
     //Write out the error information, you could also do this with a string.Format 
     as I will post lower
     Console.WriteLine(trace.GetFrame(0).GetMethod().ReflectedType.FullName);
     Console.WriteLine("Line: " + trace.GetFrame(0).GetFileLineNumber());
     Console.WriteLine("Column: " + trace.GetFrame(0).GetFileColumnNumber());
}

使用string.Format

String.Format("An error has occurred at {0} at line {1}", trace.GetFrame(0).GetMethod().ReflectedType.FullName,  trace.GetFrame(0).GetFileLineNumber());

答案 2 :(得分:0)

简单地说,

(e.ExceptionObject as Exception).ToString();

解决你的目的。