我用的是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端或ipdb端的其他东西。
修复gud的问题是它相当古老,在我看来,使用全局变量和不使用除list和cons单元格之外的emacs lisp数据结构有点笨拙。gud的完全重写被称为realgud,它目前在melpa和elpa中。支持IPDB。
最后一个选择是使用其他东西,所以我建议使用已经集成到realgud中的Python trepan debugger(但不是gud,因为我认为这是一个死胡同)。虽然它给出的回溯并不完全像IPDB,但它确实为它们和源代码上色。
而最新版本的Trepan3K回溯甚至可以按需显示您所在的位置。因此,如果您说一个函数有两个调用,比如fib()
它将区分哪个调用函数是正在进行的。
关于python - 在代码中使用ipdb和emacs'gud,没有明确的断点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21806204/