我开始在GNU Emacs 24.3.1中使用realgud作为GUD的替代品. (主要是因为当我用vanilla pdb设置断点时它不尊重它.)
我正在使用pdb bin / start_openerp启动OpenERP Web服务器并打开主脚本.但我需要能够在我正在处理的缓冲区中放置断点.
我需要如何将缓冲区附加到调试器.
关于我的环境的更多细节
对于OpenERP开发,我使用buildout和anybox recipe.这将创建bin / start_openerp脚本,该脚本重写sys.path以匹配我的buildout环境.
我正在开发几个OpenERP的自定义插件.所以当我需要进入调试器会话以解决问题时,我正在编辑一些.我做以下事情:
>编辑我的缓冲区并保存它们.
>运行pdb bin / start_openerp.这将打开ShortKeys次要模式激活的脚本.
如果我在realgud缓冲区上执行break file:lineno命令,它就可以工作并且可以遵守中断.但是我需要转到其中一个缓冲区,并在某些行中使用该点,在那里设置断点.
但首先,我需要定义几个术语.您可以在其中看到“命令缓冲区”(Pdb),它具有与之关联的Python进程和调试程序. “源代码缓冲区”是一个包含Python源代码的Emacs缓冲区.
在调试多个Python会话时,有几个命令缓冲区.有几个命令缓冲区可能在它们在运行Python程序时停止的过程中的某个时刻引用相同的Python源代码.因此,从Python源代码的缓冲区内部,如何区分您希望断点发生在几个Python会话中的哪一个?
当您在其中一个会话中停止时,命令缓冲区会知道您的位置.它安排提取源代码缓冲区并将其自身与源代码缓冲区相关联.源代码缓冲区存储与其关联的Python命令缓冲区.在理想的世界中,它将存储所有相关的命令缓冲区并将条纹标记与正确的调试器进程相关联,但是现在它只能存储一个指向命令缓冲区的指针.
源代码缓冲区也可以进入“快捷键模式”.在这里,在任何一行输入“b”将在与该源代码缓冲区相关的Python进程中的那一行设置一个断点.
但是假设有几个会话,并且您在源代码缓冲区中,并且不知道哪个命令缓冲区与之关联? Emacs命令和函数realgud:srcbuf-info-describe从源缓冲区内部运行时将显示有关源代码缓冲区的信息,包括与之关联的命令缓冲区.
因此,设置与正确的Python进程关联的源代码缓冲区的一种简单方法是从右侧命令缓冲区设置断点,然后清除断点.源代码缓冲区将处于短键模式,然后您可以在任何行上键入“b”,这将转到正确的Python会话.
Emacs realgud函数realgud-srcbuf-init-or-update可用于使用命令缓冲区初始化任何Python缓冲区,但请注意,这不是交互式命令.您需要具有命令缓冲区对象和源代码缓冲区
最后让我为Python2插入一个类似pdb和更像gdb的调试器trepan2和Python3的trepan3k插件.
有关源缓冲区的更多信息,请参见emacs-dbgr/common/buffer/source.el.