我有一个崩溃的.NET 2.0应用程序,当应用程序崩溃时,它不会给予异常或任何其他类型的消息。我正在捕捉应用程序。ThreadException事件,崩溃时没有收到任何消息。运行几天后,应用程序消失了!Windows事件日志中没有消息,没有转储文件或任何东西...我试图在几台PC上运行应用程序,但几天后,问题就出现了。
应用程序通过TCP/IP连接与另一台PC通信,所有数据始终有效,没有断开连接或其他情况。有足够的内存,在崩溃时也是如此。磁盘空间也没有问题。没有升级到.NET 4.0的选项。
此时应用程序正在windbg下运行,所以我希望这能给予一些信息。
如果您对此有任何经验,或者有一些有用的提示或工具,请告诉我!
5条答案
按热度按时间8mmmxcuj1#
如果你使用TCP/IP,那么你很可能使用线程。如果线程因未处理的异常而终止(调用EndXxxx()时很常见),那么你的应用将终止。如果计算机上的Windows错误报告已关闭,这可能是静默的,而在服务器上并不罕见。至少捕获ObjectDisposedException,以便你可以处理突然断开连接或强制关闭的连接。
是的,为AppDomain.CurrentDomain.UnhandledException编写一个事件处理程序,在Main()方法中订阅它,记录或显示e.ExceptionObject.ToString()的值,这样你就可以准确地知道它在什么地方停止了。
bkkx9g8r2#
当一个.Net应用程序突然退出而没有任何错误提示或未处理的异常处理程序触发时,很可能是您的应用程序遇到了堆栈溢出。在许多情况下,这会在没有运行任何处理程序的情况下快速终止进程。
jdzmm42g3#
请尝试AppDomain.UnhandledException。仅当UI线程上发生异常时才会引发Application.ThreadException。
ct3nt3jp4#
我有这个问题。
我曾经写过一个.Net应用程序,它在其他应用程序上执行击键模拟。我让它运行了一整夜,希望到第二天早上发现它已经完成了我所有的工作。它就这样消失了。它每次进入和退出一个例程时都会写一个日志,这样我就可以确切地看到它做了什么。什么都没有,没有异常日志。只是工作工作工作工作。And then, Nothing.
原来是因为我使用了大量的API调用,而且我非常频繁地调用它们,这导致了某种内存泄漏,可能是在我的应用程序的工作空间中。
我解决这个问题的方法是编写 * 另一个 * .Net应用程序(应用程序2),它启动了崩溃的应用程序(应用程序1)。经过这么长时间,应用程序1将自行终止,而应用程序2将在此之前终止。应用程序2将重新启动应用程序1。
等等等等,直到所有的工作都完成了!混乱和令人沮丧,但最终工作得相当漂亮:)我相信有一个更好的方法来做这件事。我可能没有正确地编组我的COM API调用或其他什么。
但似乎关闭应用程序并重新启动它是在释放内存(沿着泄漏),让它重新启动。
也许在你的情况下没有用,但这是我的故事。阿门。
58wvjzkj5#
我曾经遇到过这个问题,我发现在一个我创建对象的类中有一些循环依赖。