我有一个崩溃的.NET 2.0应用程序,它在应用程序崩溃时不会给出异常或任何其他类型的消息。我正在捕获Application.ThreadException事件,并且在崩溃时没有收到任何内容。运行几天后,应用程序消失了!在Windows事件日志中没有消息,没有转储文件或其他....我试图在几台电脑上运行该应用程序,但几天之后,问题就出现了。
应用程序通过TCP / IP连接与另一台PC通信,所有数据始终有效,没有断开的连接等等。有足够的内存,也是在崩溃时等。磁盘空间也没问题。没有选项可以升级到.NET 4.0。
此时应用程序在windbg下运行,所以我希望这会提供一些信息..
如果您对此有任何经验,或者有一些有用的提示或工具,请告诉我们!
答案 0 :(得分:3)
如果您使用TCP / IP,那么您很可能使用线程。如果线程因未处理的异常而死亡,在调用EndXxxx()时非常常见,那么您的应用程序将终止。如果在计算机上关闭Windows错误报告,这可能是静默的,在服务器上并非罕见。至少捕获ObjectDisposedException,以便您可以处理突然断开连接或强制关闭的连接。
是的,为AppDomain.CurrentDomain.UnhandledException编写一个事件处理程序,在Main()方法中订阅它。记录或显示e.ExceptionObject.ToString()的值,以便准确地告诉它正在死亡的内容。
答案 1 :(得分:2)
当.Net应用程序突然退出而没有任何错误提示或未处理的异常处理程序触发时,您的应用程序很可能遇到堆栈溢出。在很多情况下,这将很快终止进程,而无需运行任何处理程序。
答案 2 :(得分:2)
试试AppDomain.UnhandledException。 Application.ThreadException仅在UI线程上发生异常时才会引发。
答案 3 :(得分:2)
我遇到过这个问题。
我写了一个.Net应用程序,它正在其他应用程序上执行击键模拟。我会让它整晚都在运行,希望能在凌晨之前完成我所有的工作。它刚刚消失了。它每次进入和退出例程时都会写一个日志,这样我就可以确切地看到它做了什么。没什么,没有异常记录。只是工作工作的工作。 And then, Nothing.
原来这是因为我使用了一堆API调用而且我经常调用它们。这导致了某种内存泄漏,可能是在我的应用程序工作区中。
<dirtyhack>
我解决它的方法是编写另一个 .Net应用程序(应用程序2),启动崩溃的应用程序(应用程序1)。经过这么长时间的应用程序1将自行终止,但shell应用程序2就在之前然后,应用程序2将启动应用程序1备份。
</dirtyhack>
但似乎关闭应用程序并重新启动它是释放内存(连同泄漏)并让它重新开始。
也许在你的情况下没有用,但那是我的故事。阿门。