最近我们的客户遇到意外崩溃。我们已经在本地计算机上记录错误。当应用程序崩溃或发生意外行为时,是否有一种机制可以让它们以某种方式“发送错误日志”?
换句话说,我怎么知道应用程序冻结或挂起或崩溃所以我可以发送一些内容,并覆盖正常的“无响应”窗口消息?
答案 0 :(得分:2)
我不认为如果它被挂起你可以做很多事情,但是如果它崩溃了你可能能够用UnhandledExceptionEventHandler捕获一些崩溃。
您可以通过检查应用程序何时启动,如果它先前正确关闭并向日志写入“关闭”消息来处理挂起,如果没有,您可以询问用户是否要发送记录给你。
答案 1 :(得分:1)
在过去,我很幸运能够使用下面的代码将异常记录到Web服务中(只要允许客户端登录到Internet)。这是用于记录您尚未捕获的任何内容。如果您在发布模式下编译应用程序但也包含pdb文件,您将获得一个包含行号的堆栈跟踪。
您还应该记录程序集的版本,以了解应用程序的哪个版本会给您带来错误。
public void RegisterHandlers()
{
Application.ThreadException += new ThreadExceptionEventHandler(ThreadExceptionFunction);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionFunction);
}
private void UnhandledExceptionFunction(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception)args.ExceptionObject;
ExceptionLogger(e.StackTrace);
}
private void ThreadExceptionFunction(object sender, ThreadExceptionEventArgs args)
{
ExceptionLogger(args.Exception.StackTrace);
}
private void ExceptionLogger(string trace)
{
// log the message to a webservice
}