在 C# 中如何收集程序崩溃的堆栈跟踪
本文关键字:崩溃 堆栈 跟踪 程序 何收集 | 更新日期: 2023-09-27 18:31:40
我是C#的新手。我正在编写一个基于表单的小型桌面应用程序,我需要在应用程序中具有此功能。
如果应用程序在任何时候崩溃,应用程序应该有最后一次机会收集堆栈跟踪并将其发送回给我......
请给我方向。
我是否需要一个涵盖我的应用程序的主要入口点的尝试捕获??或者在 C# 应用程序中处理此类事情的最佳方法是什么。
谢谢
要捕获所有未经处理的异常,请将以下内容添加到程序中.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);
}
可以通过异常获得的堆栈跟踪。堆栈跟踪
如果我是你,我会考虑一个多合一的解决方案,例如免费和开源的NBug框架,
http://nbug.codeplex.com/
看看具有自动异常报告功能的加密混淆器。
自动异常报告使您可以非常轻松地捕获软件中发生的任何未经处理的异常,并且用户只需单击一个按钮即可轻松地向您报告这些异常。
异常报告包括所有相关信息,包括全栈跟踪信息以及所有方法参数和局部变量的值,以及系统信息、异常时间、内部版本号和可选的开发人员定义的自定义数据,如日志文件、屏幕截图等。
免责声明:我为LogicNP Software工作,Crypto Obfuscator的开发商。
如果将
代码包装在 try-catch 中,并且发生异常,则可以获取异常以查看堆栈跟踪。是的,您可以添加一个 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
}