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

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

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

请告诉我这方面的指示。

我是否需要尝试捕获覆盖主应用程序的入口点? 或者在C#应用程序中处理此类事情的最佳方法是什么。

谢谢,

要捕获所有未处理的exception,请将其添加到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获取堆栈跟踪

看一下具有自动exception报告function的Crypto Obfuscator。

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

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

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

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

http://nbug.codeplex.com/

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