对线程中的错误启动调试器

时间:2012-05-25 03:27:42

标签: python

我正在使用以下技巧来启动调试器错误 Starting python debugger automatically on error

任何想法如何使这也适用于新创建的线程中发生的错误?我正在使用线程池,类似于http://code.activestate.com/recipes/577187-python-thread-pool/

1 个答案:

答案 0 :(得分:2)

我会说在每个Thread的run()开始时注入该代码。

如果您不想更改该代码,可以执行monkeypatch,例如像这样:

Worker.run = lambda *a: [init_pdb(), Worker.run(*a)][-1]

或者像这样:

def wrapper(*a):
    # init pdb here
    Worker.run(*a)

Worker.run = wrapper

如果你想要真正的硬核,你可以在导入其他模块之前完全覆盖threading.Thread.start,或者可能是threading.Thread,例如:

class DebuggedThread(threading.Thread):
    def __init__(self):
        super(DebuggedThread, self).__init__()
        self._real_run = self.run
        self.run = self._debug_run
    def _debug_run(self):
        # initialize debugger here
        self._real_run()

threading.Thread = DebuggedThread