У меня есть приложение, написанное на C # / .NET 4 / VS C # Express. Во время сеанса отладки (этого не произошло со сборкой релиза, но я не могу точно сказать, что этого не произойдет в будущем) мое приложение завершает работу без каких-либо исключений. Единственный фрагмент в моем коде, закрывающий основную форму, доступен только через меню File / Exit и обработчик события Clicked. Так что это должен быть какой-то ... «исключительный код». Как определить, какой фрагмент кода убил мое приложение?
Решение, если кто-то хотел бы использовать его:
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler( currentDomain_UnhandledException );
Обработчик событий с ведением журнала файлов
void currentDomain_UnhandledException( object sender, UnhandledExceptionEventArgs e ) {
using ( FileStream file = new FileStream( Application.StartupPath + "\\errorlog.txt",
FileMode.Append, FileAccess.Write ) ) {
StreamWriter streamWriter = new StreamWriter( file );
streamWriter.WriteLine( "-------------------------------------------------" );
streamWriter.WriteLine( "---------- " + System.DateTime.Now + " ---------" );
streamWriter.WriteLine( "-------------------------------------------------" );
streamWriter.WriteLine( "Terminating: " + e.IsTerminating );
Exception ex = (Exception)e.ExceptionObject;
while ( ex != null ) {
streamWriter.WriteLine( "--------- Exception: ---------- " );
streamWriter.WriteLine( ex.GetType() );
streamWriter.WriteLine( ex.Message );
streamWriter.WriteLine( ex.HelpLink );
streamWriter.WriteLine( ex.Source );
streamWriter.WriteLine( ex.StackTrace );
ex = ex.InnerException;
}
streamWriter.WriteLine();
streamWriter.Close();
MessageBox.Show( ( (Exception)e.ExceptionObject ).Message );
}
}