我是 C# 新手。我正在编写一个基于桌面表单的小型应用程序,我需要在应用程序中包含此功能。
如果应用程序在任何时候崩溃,应用程序应该有最后一次机会收集堆栈跟踪并将其发回给我......
请给我指示。
我是否需要覆盖我应用程序主要入口点的 try catch?或者在 C# 应用程序中处理此类事情的最佳方式是什么。
谢谢你,
最佳答案
要捕获所有未处理的异常,请将其添加到 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获取堆栈跟踪
关于c# - 在 C# 中如何收集程序崩溃的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202987/