如何在给定的情况下知道调试/配置文件挂起C#应用程序

时间:2013-06-13 10:10:03

标签: c# .net multithreading visual-studio-2010 debugging

我有用C#编写的mulch-threaded程序(控制台应用程序)

它可以运行6到10个小时之后它会失败并停止,控制台不会关闭并显示上次成功的日志

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

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

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

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

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

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

是否有可用于此挂起/停止的应用程序的工具?应该采取什么样的正确方法。

我使用的是ANTS内存pro-filer,性能专业版,但所有这些工具都可用于运行应用程序。

我能得到的最多的是记忆转储。

欢迎提出建议。

编辑: 最初我不想重新运行它等待数小时进行调试,如果没有办法可以作为最后一个选项。

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

2 个答案:

答案 0 :(得分:0)

尝试Debug Diagnostics Tool v1.2它完全符合您的需求,并且针对不同的问题提供了易于理解的向导。

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

答案 1 :(得分:0)

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

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