gpt4 book ai didi

c# - 捕获 C# .NET 中的所有崩溃

转载 作者:行者123 更新时间:2023-11-30 18:03:45 32 4
gpt4 key购买 nike

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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com