我正在使用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的堆栈跟踪能很好地工作吗?
如果是这样,那很好,但有没有办法从emacs启动ipdb而无需手动添加set_trace()命令?
答案 0 :(得分:8)
这里的基本问题是 gud 正在寻找(Pdb)
提示符, ipdb 不会以这种方式提示。有三种方法可以解决此问题:修复 ipdb 以提供(Pdb)
提示,修复 gud ,无需查找(Pdb)
或(我的最喜欢的)在 gud 方面或 ipdb 方面使用其他东西。
修复 gud 的问题在于它相当陈旧,在我看来使用全局变量有点吱吱作响,而不是使用除列表和缺点之外的Emacs Lisp数据结构细胞。 gud 的完全重写称为realgud,目前在MELPA和ELPA中。并且支持ipdb。
最后一个选项是使用其他内容,所以让我建议已经集成到 realgud 中的Python trepan debugger(但不是 gud ,因为我认为死路一条)。虽然它提供的回溯与ipdb不完全相同,但它确实为它们和源代码着色。
最新版本的trepan3k回溯甚至可以根据需要显示您的位置。因此,如果您说两个函数调用,如fib()
,它将区分哪个调用函数正在进行中。