10秒后Python pdb断点

时间:2014-08-04 21:38:45

标签: python deadlock pdb

在某些情况下,我的python程序没有响应,因为似乎存在死锁。由于我不知道这个死锁发生在哪里,我想在10秒后设置一个断点或转储所有线程的堆栈,以便了解我的程序正在等待什么。

3 个答案:

答案 0 :(得分:0)

使用logging模块并放置,例如Logger.debug()通过您的计划呼叫战略性地点。如果您愿意,可以通过一个设置(Logger.setLevel)禁用这些消息。您可以选择是否要将它们写入例如stderr或文件。

答案 1 :(得分:0)

import pdb
from your_test_module import TestCase

testcase = TestCase()
testcase.setUp()
pdb.runcall(testcase.specific_test)

然后在闲暇时ctrl-c。 KeyboardInterupt将导致pdb进入调试器提示符。

答案 2 :(得分:0)

嗯,事实证明,这是因为我的数据库已被锁定(连接未被关闭)以及测试被删除时(并且数据库架构正在被删除,因此数据库是干净的接下来的测试),psycopg2只是忽略了KeyboardInterrupt异常 我使用faulthandler模块解决了我的问题(对于早期版本,有一个pypi repo)。故障处理程序允许我在使用faulthandler.dump_traceback_later(3, repeat=True)一段时间(重复)之后将堆栈跟踪转储到任何文件(包括sys.stderr)。这使我能够设置我的程序停止响应的断点,并有效地解决问题。