Я запускаю Emacs 23.2 с python.el
и отлаживаю некоторый код Python с pdb
.
Мой код порождает одноуровневый поток с использованием модуля threading
, и я устанавливаю точку останова в начале метода run()
, но pdb
разрыв никогда не обрабатывается, даже если код определенно выполняется и работает для всех намерения и цели.
У меня сложилось впечатление, что я могу использовать pdb
для установки точек останова в любом потоке , хотя полная многопоточная отладка фактически не поддерживается.
Я ошибаюсь, предполагая, что pdb
в M-x pdb
вызове может прерваться в любом потоке? Если вы не верите мне, попробуйте этот минимальный пример для себя.
import threading
class ThreadTest(threading.Thread):
def __init__(self,):
threading.Thread.__init__(self)
def run(self):
print "Type M-x pdb, set a breakpoint here then type c <RET>..."
print "As you can see it does not break!"
if __name__ == '__main__':
tt = ThreadTest()
tt.start()
Благодаря Пьеру и тексту книги, на которую он ссылается, я попытался включить pdb.set_trace()
следующим образом:
def run(self):
import pdb; pdb.set_trace()
print "Set a breakpoint here then M-x pdb and type c..."
Но это только ломает и предлагает pdb
элементы управления для step, затем продолжить и так далее, если оно выполняется из консоли и запускается непосредственно в интерпретаторе Python, и, что особенно важно, not через Mx pdb
- по крайней мере, с моей конфигурацией Emacs и pdb
.
Итак, мой первоначальный вопрос можно было бы перефразировать:
Есть ли способ вызвать программу на Python из Emacs, где эта программа использует встроенный вызов pdb (тем самым поддерживая разрывы в многопоточных приложениях) и для чего автоматически создается буфер управления коментариями pdb?
или
Если я запускаю свое приложение Python с использованием Mx pdb, и оно содержит встроенный вызов pdb, как лучше всего справиться с тем фактом, что это приводит к pdb-session-inside-a-pdb-session с соответствующей потерей контроля?