我有一个事件驱动的应用程序,用 python 编写。一段时间后(通常 > 1 周),它似乎只是停止响应事件。发生这种情况时,我只是按 ctrl-C 并重新运行,一切又好了。然而,这种情况不断发生,我不知道是什么原因造成的,这有点烦人。 有没有一种方法可以运行我的应用程序,当发生这种情况并且应用程序不再接受连接时,我可以进入调试器并查看它在做什么以及为什么它不接受连接?

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

最佳答案

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

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

关于python - 调试一个类似于 "hangs"的 Python 应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28637795/

10-12 18:37
查看更多