繁体   English   中英

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

[英]In C# how to collect stack trace of program crash

我是C#的新手。 我正在编写一个基于桌面的小型应用程序,我需要在应用程序中使用此功能。

如果应用程序随时崩溃,应用程序应该有最后的机会收集堆栈跟踪并将其发回给我...

请告诉我这方面的指示。

我是否需要尝试捕获覆盖主应用程序的入口点? 或者在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获取堆栈跟踪

如果我是你,我会考虑一个一体化的解决方案,例如免费和开源的NBug框架,

http://nbug.codeplex.com/

看看具有自动异常报告功能的Crypto Obfuscator。

自动异常报告使您可以非常轻松地捕获软件中发生的任何未处理的异常,并使用户只需单击一下按钮即可轻松报告这些异常。

异常报告包括所有相关信息,包括完整堆栈跟踪信息以及所有方法参数和局部变量的值,以及系统信息,异常时间,内部版本号以及可选的开发人员定义的自定义数据,如日志文件,屏幕截图等

免责声明:我为Crypto Obfuscator的开发者LogicNP Software工作。

如果将代码包装在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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM