我使用的是python.el如果我从菜单中选择"debugger",并输入"python-m pdb myfile.py",gud就会启动,在一个拆分框中,我看到(pdb)提示符在其中一个,我的python代码在另一个,第一行有一个插入符号,表示它已经准备好了。例如,"n"步进到下一行,插入符号相应地移动。
如果我输入"python-m ipdb myfile.py",则框架会拆分,其中一个拆分标记为gud,但没有明显的ipdb控制台。换句话说,这种启动ipdb的方式似乎不起作用。如果我使用Ipdb.set_trace()在python代码中手动插入断点,Ipdb的工作原理很好,只是它不使用gud接口。这样做是有意的吗,这样ipdb的堆栈跟踪就可以很好地工作了?
如果是,那也没关系,但是有没有一种方法可以在不手动添加set_trace()命令的情况下从emacs启动ipdb?
这里的基本问题是gud正在寻找(Pdb)
提示,而ipdb不以这种方式提示。有三种方法可以解决这个问题:修复ipdb以给出(Pdb)
提示,修复gud不需要查找(Pdb)
,或者(我最喜欢的)在gud侧或ip db侧使用其他东西。
修复gud的问题是,它相当旧,在我看来,使用全局变量和不使用列表和cons单元格以外的Emacs Lisp数据结构有点不稳定。gud的完全重写称为realgud,目前在MELPA和ELPA中。并且支持ipdb。
最后一个选项是使用其他东西,所以让我建议使用Python trepan调试器,它已经集成到realgud中(但不是gud,因为我认为这是一条死胡同)。尽管它提供的回溯与ipdb的并不完全一样,但它确实对它们和源代码进行了着色。
最近版本的trepan3k回溯甚至会根据需要显示你在队伍中的位置。所以,如果你说一个函数的两个调用,比如fib()
,它会区分哪个调用函数是正在进行的。