我目前正在管理一个复杂的应用程序。 它是用C#和.NET4.7.2编写的。
有时这个程序会在没有通知的情况下关闭。 即使使用try/catch块和Main方法中的MessageBox.show()
,也不会出现错误消息(我知道这可能不是最好的方法,但应该可以工作)。
有几个线程在不同点运行,调用外部DLL,有时甚至调用驱动程序。 所以为了记录是否是另一个线程使整个事情崩溃,我在开始时这样做:
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.ThreadException += Application_ThreadException;
因为我不确定哪个是正确的。 在这些方法中,我将异常(在执行空检查之后)记录到一个文件中(使用file.appendtext
和一个基于时间戳的文件)。
还是一无所获。 在一些随机的时间(2到6个小时)之后,应用程序不断崩溃,我没有日志信息,没有错误消息,我在这里有点迷路了。
该应用程序在发布模式下运行,我无法使用Visual Studio在其中运行调试器(因为这样会使它变得容易)。 也许还有另一种方法可以运行外部调试器?
有人能给我一个提示,如何赶上一个会导致应用程序静默崩溃的异常吗?
根据您的解释,我想到的唯一一件事是,您的应用程序中有一些激发和忘记
线程,这些线程有时会抛出异常,但您的应用程序无法跟踪它们以记录或捕获它们的异常。
确保所有任务都正确等待,并且没有任何异步void
方法。
如果你真的需要一些fire and forgettaskaliver
操作在你的应用程序中,至少可以在你的类中使用一些private Task fireandforgettaskaliver
来保持它们的活力。
另一个可能是应用程序中的内存泄漏,导致堆栈溢出异常。