Как отлаживать Python-витой ipdb
Есть ли способ запустить интерактивный отладчик внутри скрученного приложения?
import ipdb;ipdb.set_trace()
это решение в:
7-02-03T22:25:49+0100 [stderr#error] Traceback (most recent call last):
2017-02-03T22:25:49+0100 [stderr#error] File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
2017-02-03T22:25:49+0100 [stderr#error] self.run()
2017-02-03T22:25:49+0100 [stderr#error] File "bo/OLA_test.py", line 110, in run
2017-02-03T22:25:49+0100 [stderr#error] self.wrapper.Run()
2017-02-03T22:25:49+0100 [stderr#error] File "/usr/lib/python2.7/dist-packages/ola/ClientWrapper.py", line 278, in Run
2017-02-03T22:25:49+0100 [stderr#error] self._ss.Run()
2017-02-03T22:25:49+0100 [stderr#error] File "/usr/lib/python2.7/dist-packages/ola/ClientWrapper.py", line 197, in Run
2017-02-03T22:25:49+0100 [stderr#error] self._CheckTimeouts(now)
2017-02-03T22:25:49+0100 [stderr#error] File "/usr/lib/python2.7/dist-packages/ola/ClientWrapper.py", line 222, in _CheckTimeouts
2017-02-03T22:25:49+0100 [stderr#error] event.Run()
2017-02-03T22:25:49+0100 [stderr#error] File "/usr/lib/python2.7/dist-packages/ola/ClientWrapper.py", line 67, in Run
2017-02-03T22:25:49+0100 [stderr#error] self._callback()
2017-02-03T22:25:49+0100 [stderr#error] File "/usr/lib/python2.7/bdb.py", line 49, in trace_dispatch
2017-02-03T22:25:49+0100 [stderr#error] return self.dispatch_line(frame)
2017-02-03T22:25:49+0100 [stderr#error] File "/usr/lib/python2.7/bdb.py", line 68, in dispatch_line
2017-02-03T22:25:49+0100 [stderr#error] if self.quitting: raise BdbQuit
с витой ==16.6.0
1 ответ
Вам просто нужно держать stdin и stdout подключенными к чему-то полезному. Удостоверьтесь, что вы не демонизируете, и скажите, чтобы система регистрации не ввернулась с stdio.
В качестве альтернативы вы можете использовать отладчик, который не требует stdin и stdout. Например, с pudb
:
import pudb.remote
pudb.remote.set_trace()
Кроме того, вы не спрашивали, но многопроцессорная и Twisted в основном несовместимы. Можно заставить их работать надежно вместе с большой, большой осторожностью - но обычно есть более простые способы сделать то же самое.