如何将现有缓冲区附加到realgud调试器?

man*_*anu 5 python debugging emacs

我开始realgud在GNU Emacs 24.3.1中使用它作为GUD的替代品.(主要是因为当我用vanilla pdb设置断点时它不尊重它.)

我正在启动OpenERP Web服务器pdb bin/start_openerp并打开主脚本.但我需要能够在我正在处理的缓冲区中放置断点.

我需要如何将缓冲区附加到调试器.

关于我的环境的更多细节

对于OpenERP开发我正在使用buildoutanybox配方.这将创建bin/start_openerp重写该脚本sys.path以匹配我的buildout环境的脚本.

我正在开发几个OpenERP的自定义插件.所以当我需要进入调试器会话以解决问题时,我正在编辑一些.我做以下事情:

  1. 编辑我的缓冲区并保存它们.
  2. pdb bin/start_openerp.这将打开ShortKeys活动次要模式的脚本.

如果我break file:lineno在realgud缓冲区上执行命令,它就会工作并且会中断休息.但是我需要转到其中一个缓冲区,并在某些行中使用该点,在那里设置断点.

roc*_*cky 4

这里有一个必须克服的概念问题。

但首先,我需要定义几个术语。您可以看到“命令缓冲区” (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 。