14

我正在使用 python.el 如果我从菜单中选择“调试器”,然后输入“python -m pdb myfile.py”,gud 启动,并且在拆分框架中我看到(Pdb)提示符和我的 python另一行的代码在第一行带有插入符号,表示它已准备就绪。例如,'n' 步到下一行,插入符号相应地移动。

相反,如果我输入“python -m ipdb myfile.py”,则帧拆分,其中一个拆分标记为 gud,但没有明显的 ipdb 控制台。换句话说,这种启动ipdb的方式似乎行不通。如果我使用 ipdb.set_trace() 手动将断点插入到我的 python 代码中,则 Ipdb 工作正常,但它不使用 gud 接口。这是故意的,以便 ipdb 的堆栈跟踪能够很好地工作吗?

如果是这样,那很好,但是有没有办法从 emacs 启动 ipdb 而无需手动添加 set_trace() 命令?

4

1 回答 1

10

这里的基本问题是gud正在寻找(Pdb)提示,而 ipdb并没有以这种方式提示。有三种方法可以解决这个问题:修复ipdb以给出(Pdb)提示,修复gud不需要查找或(我最喜欢的)在gud端或ipdb(Pdb)端使用其他东西。

修复gud的问题在于它相当陈旧,而且在我看来,使用全局变量和不使用 Emacs Lisp 数据结构(除了列表和cons单元格之外)有点老旧。对gud的完全重写称为realgud,目前在 MELPA 和 ELPA 中。并且支持 ipdb。

最后一个选项是使用其他东西,所以让我建议已经集成到realgud中的Python trepan 调试器(但不是gud,因为我认为这是一个死胡同)。尽管它提供的回溯与 ipdb 的不完全一样,但它确实为它们和源代码着色。

最新版本的 trepan3k 回溯甚至会按需显示您所在的位置。因此,如果您说一个函数的两个调用,就像fib()它会区分哪个调用函数是正在进行中的函数一样。

于 2015-07-05T15:37:40.210 回答