Я занимаюсь разработкой приложения для Windows Phone 7 Silverlight. Я хочу сделать обработку ошибок уровня приложения вместо того, чтобы писать try ... catch ... во всех методах. Мне нужно извлечь имя метода, имя класса и номер строки, где произошла фактическая ошибка. Ниже приведен демонстрационный код. В событии Application_UnhandledException я ожидаю Method = "GenerateError" и Class = "ExceptionTesting" . Кроме того, я хочу получить LineNumber, где произошла фактическая ошибка (это не показано в коде).
Код для генерации ошибки:
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();
}
}