在事件中从 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();
}
}
Application_UnhandledException
方法不会从发生异常的方法调用,因此new StrackTrace()
没有意义,正如您所发现的那样。
要获取发生异常的位置的堆栈跟踪,请使用 e.Exception.StackTrace
。请注意,真正的异常可能包装在另一个异常中,可能是几层深(e.Exception.InnerException
)。
您也可以使用 BugSense 来获取此信息。
免责声明:我是联合创始人之一