0

我有用 C# 编写的覆盖线程程序(控制台应用程序)

它运行正常长达 6 -10 小时后它失败并停止,控制台不关闭并显示最后一个成功的日志

它写入文件中的错误日志(所有可能的)。

如果发生 IO 异常,它会将其写入 Windows 事件

还有 Memory Guard 和 Thread Guards 将程序限制在给定的限制。

当它停止时(6-10 小时后)没有任何反应,没有错误日志、心跳、数据库调用、内存使用情况,我可以看到线程在最大限制设置的 70% 左右产生。

我知道这可能是内存泄漏,因为由于数据库调用延迟,线程可能无法释放。

我只是想处理这个停止的应用程序以了解确切的问题,例如内存泄漏在哪里或哪个调用阻塞。

是否有任何可用的工具适用于这个挂起/停止的应用程序?什么应该是正确的方法。

我使用了 ANTS 内存分析器、性能分析器,但所有这些工具都适用于正在运行的应用程序。

我能得到的最多的是内存转储。

欢迎提出建议。

编辑:最初我不想重新运行它等待几个小时来调试,如果没有办法,那将是最后的选择。

我试图附加调试器并放置断点,它说“断点当前不会命中......”

4

2 回答 2

0

试试Debug Diagnostics Tool v1.2它完全可以满足您的需求,并且具有针对不同问题的易于理解的向导。

如果您不想使用此工具,我会将调试器附加到挂起的进程,您至少应该能够看到哪些线程仍在运行以及在哪个模块中

于 2013-06-13T10:21:04.110 回答
0

首先,您应该查看事件查看器。然后,如果您的应用程序在没有日志的情况下崩溃,则可能是由于未处理的异常。将以下代码放在 main 方法中:

Application.ThreadException += (sender, arg) => { log.Error("Unhandled exception : "+e.Exception);};
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

祝你好运

于 2013-06-13T10:21:24.830 回答