在多线程Python代码中遇到Emacs pdb和断点问题

我正在使用
python.el运行Emacs 23.2并使用pdb调试一些
Python代码.

我的代码使用线程模块生成一个兄弟线程,我在run()方法的开头设置了一个断点,但是pdb永远不会处理它,即使代码肯定运行并且适用于所有意图和目的.

我的印象是我可以使用pdb在任何线程中建立断点,即使实际上不支持完整的多线程调试.

我错误地假设在一个M-x内的pdb 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控件,如果它是从控制台执行并直接在Python解释器中运行,而且至关重要的是不通过M-x pdb – 至少我的Emacs和pdb配置.

所以我原来的问题可以改写:

有没有办法从Emacs中调用Python程序,其中该程序使用内联调用pdb(从而支持多线程应用程序中断),以及是否有自动魔法建立的pdb comint控制缓冲区?

要么

如果我使用M-x pdb运行我的Python应用程序并且它包含pdb的内联调用,那么如何最好地处理这会导致pdb-session-in-a-pdb-session与相关的控制权丧失?

最佳答案 你使用默认的python.el?我已经放弃了并开始使用python-mode.el.然后键入M-x shell,从提示符类型python myproblem.py(当然用你的程序名替换),它将停在set_trace行.它与pdb集成开箱即用. (它适用于您的程序).

点赞