调试过程在旧版第三方应用程序中挂起

时间:2010-02-16 14:45:47

标签: debugging process hang

我们有一个传统的第三方电话系统建立在一个名为“CT ADE”的东西上,它会定期挂起几秒钟(5到30),然后恢复。在这些挂起期间,用户会在手机菜单中遇到令人沮丧的停顿。这至少持续了几个星期。

这段代码不是我写的,所以我对它的了解非常有限。在内部有多个“任务”(线程?),每个电话线一个,处理呼叫。当应用程序挂起时,所有“任务”都会挂起。

此问题似乎与负载无关。即使在低使用时间也会发生。它似乎与网络无关(发生在DB与此应用程序位于同一物理盒上的系统上)。尽管创建执行大量DB I / O和文件I / O的示例任务可能会导致此应用程序中的暂停时间缩短,但似乎与网络或磁盘无关。

发生问题时,进程不会显示任何内存或CPU峰值。

此时我只是想抓住任何事情......

3 个答案:

答案 0 :(得分:0)

使用遗留代码很痛苦 - 根据我的经验,您只需要潜入并尝试通过适合您的任何方式了解代码正在执行的操作 - 无论是通过阅读代码并尝试弄清楚它的作用,或者调试各种场景并逐步执行每行代码。

这需要一段时间,并且会有部分代码你永远无法理解,但是如果有足够的时间盯着代码并试验它的作用,你最终应该能够理解到足以找出问题所在是

有一本书Working Effectively with Legacy Code,我从来没有读过,但本来就很好。

答案 1 :(得分:0)

尝试在其中一个挂起期间运行采样分析器,以查看CPU时间的使用情况。

答案 2 :(得分:0)

如果问题与高CPU使用率无关,则配置文件可能不会为您带来任何好处。

对我而言,这听起来像是一个多线程的问题。如果可能,请附加调试器并在问题显示时暂停。查看当前执行的所有线程的代码/调用堆栈。可能是多个线程尝试访问单个资源或线程安全函数并且必须等待,因为另一个线程具有对此资源的独占访问权。 这可能是像写入日志一样不起眼的事情。