调试一个只是“挂起”的python应用程序

时间:2015-02-20 20:41:52

标签: python debugging websocket pdb

我有一个用python编写的事件驱动的应用程序。过了一会儿(通常> 1周),似乎只是停止响应事件。当发生这种情况时,我只需要ctrl-C并重新运行,一切都很好。然而,令人讨厌的是,这种情况一直在发生,我不知道是什么引起了它。 有没有办法可以运行我的应用程序,当这种情况发生并且应用程序不再接受连接时,我可以进入调试器,看看它在做什么以及它为什么不接受连接吗

我之前使用过pdb,但我使用它的方式(if condition: pdb.set_trace())并不适用于此,因为我不知道它在做什么在代码失败时。我理想的情况是,而不是Ctrl-C,我可能会按Ctrl-somethingelse,这会导致它停止并进入调试器。这样的事情容易做到吗?

1 个答案:

答案 0 :(得分:2)

在您的情况下触发pdb可能并不简单。但是,每当我需要调试这样的挂起时,我都会检查"快照"使用dumpstacks()函数处理进程中所有线程的回溯。

您可以使用计时器定期调用它并将输出打印到日志文件,并在发现挂起时引用它,或利用某些RPC机制(例如信号)在您的进程中触发函数调用需求。我通常会做后者,因为我系统中的进程已经监听了这样的RPC请求(使用rpyc)。