В С# как собрать трассировку стека программы сбой
Я новичок в С#. Я пишу небольшое приложение на основе рабочего стола, и мне нужно иметь эту функцию в приложении.
Если приложение аварийно завершает работу, в приложении должна появиться последняя возможность для сбора трассировки стека и отправки его мне...
Пожалуйста, дайте мне указания по этому вопросу.
Нужна ли попытка захвата, охватывающая основную точку входа моего приложения? или что является лучшим способом обработки таких вещей в приложении С#.
Благодарю вас,
Ответы
Ответ 1
Чтобы уловить все необработанные исключения, добавьте это в program.cs:
[STAThread]
static void Main()
{
AppDomain currentDomain = default(AppDomain);
currentDomain = AppDomain.CurrentDomain;
// Handler for unhandled exceptions.
currentDomain.UnhandledException += GlobalUnhandledExceptionHandler;
// Handler for exceptions in threads behind forms.
System.Windows.Forms.Application.ThreadException += GlobalThreadExceptionHandler;
...
}
private static void GlobalUnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = default(Exception);
ex = (Exception)e.ExceptionObject;
ILog log = LogManager.GetLogger(typeof(Program));
log.Error(ex.Message + "\n" + ex.StackTrace);
}
private static void GlobalThreadExceptionHandler(object sender, System.Threading.ThreadExceptionEventArgs e)
{
Exception ex = default(Exception);
ex = e.Exception;
ILog log = LogManager.GetLogger(typeof(Program)); //Log4NET
log.Error(ex.Message + "\n" + ex.StackTrace);
}
Трассировка стека вы можете получить с помощью exception.StackTrace
Ответ 2
Если бы я был вами, я бы рассмотрел решение "все-в-одном", например, бесплатную инфраструктуру NBug с открытым исходным кодом,
http://nbug.codeplex.com/
Ответ 3
Взгляните на Crypto Obfuscator, у которого есть функция Автоматическая публикация исключений.
Автоматическая отчетность об исключительных ситуациях позволяет вам легко поймать любые необработанные исключения, которые происходят в вашем программном обеспечении, и для ваших пользователей легко сообщать об этих исключениях одним щелчком кнопки.
Отчеты об исключениях включают всю соответствующую информацию, включая полную информацию о трассировке стека, а также значения всех аргументов метода и локальных переменных, а также системную информацию, время исключения, номер сборки и необязательные определенные пользователем определенные данные, такие как журнал файлы, скриншоты и т.д.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я работаю в LogicNP Software, разработчике Crypto Obfuscator.
Ответ 4
Если вы завершаете свой код в try-catch и возникает Exception, вы можете получить в Exception, чтобы увидеть трассировку стека. Да, вы бы добавили try-catch, чтобы обернуть основную точку входа.
try
{
MainEntryPoint();
}
catch (Exception exc)
{
System.Diagnostics.Debug.Print(exc.Message); // get at entire error message w/ stacktrace
System.Diagnostics.Debug.Print(exc.StackTrace); // or just the stacktrace
}