我正在运行 Emacs 23.2python.el
并使用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()
感谢 Pierre 和他提到的书本,我尝试了以下选项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、next、continue等的控制,如果它是从控制台执行并直接在 Python 解释器中运行,并且关键不是通过M-x pdb
- 至少使用我的 Emacs 和pdb
配置。
所以我最初的问题可能与改写有关:
有没有办法从 Emacs 中调用 Python 程序,该程序使用 pdb 的内联调用(从而支持多线程应用程序中的中断),并且自动建立一个 pdb comint 控制缓冲区?
或者
如果我使用 Mx pdb 运行我的 Python 应用程序并且它包含 pdb 的内联调用,那么如何最好地处理这会导致 pdb-session-within-a-pdb-session 以及相关的失控这一事实?