Stack Overflow 上已经有一些关于此主题的非常好的讨论帖,但似乎没有关于其中任何一个的简明答案。我的 C# 控制台应用程序(作为 Windows 服务运行)启动一个 Java 进程并管理它(启动/停止/重新启动它),但我的问题是我将远程进入机器,有时会看到它已经启动了大约 20 个 Java 进程。
这显然是我的应用程序在某个时候崩溃的问题,并且没有关闭它启动的 Java 进程。我在 AppDomain.CurrentDomain 中 Hook 了“UnhandledExceptionEventHandler”,并从中调用了 TerminateProcess()(关闭事件的 Java 进程),但这个问题仍然时有发生。
我的应用程序有一个主线程、一个 TCP 服务器线程(接受异步连接)和一个 UDP 服务器线程。在 UnhandledException 之上还有什么我应该 Hook 的吗?
编辑
我还刚刚想到,我的代码中有几个 Try/Catch block ,它们只是写入控制台,但我从未见过。我应该只删除它们以便它们被 UnhandledException 捕获还是在那里添加一个记录器?
最佳答案
首先,如果您不想记录,则必须将代码中的 Console.WriteLine..
行更改为 Debug.WriteLine..
,所以它的输出将仅处于调试状态。
其次,当发生任何异常时,如果您不知道如何处理或修复它,然后重新抛出它 catch { throw; }
登录后。我个人认为
try
{
...
}
catch (Exception exception)
{
Log(exceptiosn);//log it first or Debug.WriteLine...
#if DEBUG
System.Diagnostics.Debugger.Break();//break at the debugger here.
#endif//DEBUG
throw;
}
清理代码后,现在只要抛出 DomainUnhandledException
,就可以重新启动应用程序。一个例子是 here ,这个想法是您从您的应用程序启动一个新实例,然后终止第一个实例。您还定义了一个互斥体,因此一次只有一个实例会存活。
关于c# - 捕获 C# .NET 中的所有崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888172/