c# - 在 C# 中如何收集程序崩溃的堆栈跟踪

标签 c# .net winforms error-handling

我是 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/

相关文章:

c# - EF 代码优先 : Multiplicity constraint violation

c# - 关闭 Windows 8 Charm Bar

c# - ASP.NET 日期和时间选择器?

c# - LINQ 不会用 float 对组求和吗?属性(property)

c# - App.Config 连接字符串

c# - ObjectListView Treeview 获取选中的 TreeView 节点Id

c# - 导入整个命名空间与在 C# 中使用别名之间的性能?

c# - 将 STL/C++/CLI 容器传递给 .Net

C#:将 COMP-3 压缩十进制转换为人类可读的值

c# - 将Datatable数据绑定(bind)到Windows窗体的Gridview