在事件中从 StatckTrace 获取方法、类和行号Application_UnhandledException

本文关键字:Application UnhandledException 事件 StatckTrace 方法 获取 | 更新日期: 2023-09-27 17:56:56

我正在开发Windows Phone 7 Silverlight应用程序。我想做应用程序级别的错误处理而不是编写try...抓住。。。在所有方法中。我需要提取实际发生错误的方法名称,类名和行号。下面是演示代码。Application_UnhandledException事件中,我期待方法 = "生成错误" 和类 = "异常测试"。另外,我想获取实际发生错误的行号(这未显示在代码中)。

生成错误的代码:

public partial class ExceptionTesting : PhoneApplicationPage  
{
    // Generate Error to Test Exception Handling
    private void GenerateError()
    {
        Int16 i = Convert.ToInt16("test");
    }
}

处理应用程序级异常的代码:

// Code to execute on Unhandled Exceptions
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
StackTrace st = new StackTrace();
var query = st.GetFrames()         // get the frames
        .Select(frame => new
        {                   
            Method = frame.GetMethod(),
            Class = frame.GetMethod().DeclaringType
        });
foreach (var q in query)
{
    if (q.Method.Name.Contains("GenerateError"))
    {
        MessageBox.Show("Class: " + q.Class + ", Method: " + q.Method);
    }
}
if (System.Diagnostics.Debugger.IsAttached)
{
    // An unhandled exception has occurred; break into the debugger
    System.Diagnostics.Debugger.Break();
}
}

在事件中从 StatckTrace 获取方法、类和行号Application_UnhandledException

Application_UnhandledException 方法不会从发生异常的方法调用,因此new StrackTrace()没有意义,正如您所发现的那样。

要获取发生异常的位置的堆栈跟踪,请使用 e.Exception.StackTrace 。请注意,真正的异常可能包装在另一个异常中,可能是几层深(e.Exception.InnerException)。

您也可以使用 BugSense 来获取此信息。

免责声明:我是联合创始人之一