在.NET中处理粗暴的应用程序中止

Sta*_*ght 5 c# unhandled-exception

我知道即使问这个问题,我也开始自己开火了,但我想我会看看StackOverflow是否有解决我遇到的问题的方法......

我有一个C#应用程序在客户端站点失败,我无法在本地重现.不幸的是,我很难(不可能)获得任何有助于隔离问题根源的信息.

我有一个相当广泛的错误监控框架,它在所有常见的地方监视未处理的异常:

  • 我控制的线程中的Backstop异常处理程序
  • WinForms异常的Application.ThreadException
  • AppDomain.CurrentDomain.UnhandledException

在我可以访问它们的地方记录详细信息.

这在过去非常有用,可以识别生产代码中的问题,但是没有向我提供有关当前一系列问题的任何信息.

我最好的猜测是,核心问题是"粗鲁"异常类型之一(线程中止,内存不足,堆栈溢出,访问冲突等),这些异常类型正在逐步升级为严重关闭有机会看到发生了什么.

我可以对快照信息做些什么,因为我的进程崩溃会有用吗?理想情况下,我可以写出我的自定义日志格式,但如果我能有一种可靠的方法来确保在某处写入崩溃转储,我会很高兴.

我希望我可以实现从CriticalFinalizerObject派生的类,并在它处理时吐出最后机会错误注销,但这似乎并没有在我测试的StackOverflow场景中触发.

由于缺少代码签名证书,我无法使用Windows错误报告和朋友.

我不是试图从任意异常中"恢复",我只是想记下下去的路上出了什么问题.

有任何想法吗?

Joh*_*ler 1

您可以尝试创建一个小型转储文件。这是一个 C++ API,但应该可以编写一个小型 C++ 程序,启动应用程序并保留进程句柄,等待进程句柄,然后在应用程序终止时使用进程句柄创建小型转储。