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

标签 python debugging emacs

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

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

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

有关我的环境的更多详细信息

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

我正在开发几个 OpenERP 的自定义插件。所以当我需要进入调试器 session 来解决问题时,我正在编辑一些。我执行以下操作:

  • 编辑我的缓冲区并保存它们。
  • 运行 pdb bin/start_openerp .这将打开脚本 ShortKeys次要模式激活。

  • 如果我执行 break file:lineno在 realgud 缓冲区上运行的命令和中断受到尊重。但是我需要转到其中一个缓冲区并在某行中设置点,在那里设置断点。

    最佳答案

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

    但首先,我需要定义几个术语。 “命令缓冲区”是您看到的地方 (Pdb)它具有与之关联的 Python 进程和调试器。 “源代码缓冲区”是一个包含 Python 源代码的 Emacs 缓冲区。

    当您调试多个 Python session 时,有多个命令缓冲区。有可能多个命令缓冲区在它们停止运行 Python 程序的过程中的某个时刻引用相同的 Python 源代码。那么从 Python 源代码的缓冲区中,如何区分您希望断点发生在几个 Python session 中的哪一个?

    当您在其中一个 session 中停止时,命令缓冲区知道您在哪里。它安排拉起源代码缓冲区并将其自身与该源代码缓冲区相关联。源代码缓冲区存储与其关联的 Python 命令缓冲区。在理想情况下,它将存储所有相关的命令缓冲区并将边缘标记与正确的调试器进程相关联,但现在它只能存储一个指向命令缓冲区的指针。

    源代码缓冲区也可能进入“快捷键模式”。在这里,在任何行上键入“b”将在与该源代码缓冲区关联的 Python 进程中的该行设置断点。

    但是假设有几个 session 并且您在源代码缓冲区中并且不知道哪个命令缓冲区与它相关联?当从源缓冲区内部运行时,Emacs 命令和函数 realgud:srcbuf-info-describe 将显示有关源代码缓冲区的信息,包括与其关联的命令缓冲区。

    因此,设置与正确 Python 进程关联的源代码缓冲区的一种简单方法是从正确的命令缓冲区设置断点,然后清除断点。源代码缓冲区将处于短键模式,然后您可以在任何行上键入“b”,这将转到正确的 Python session 。

    Emacs realgud 函数 realgud-srcbuf-init-or-update 可用于使用命令缓冲区初始化任何 Python 缓冲区,但请注意,这不是交互式命令。您需要有命令缓冲区对象和源代码缓冲区

    最后让我插入一个类似 pdb 和更像 gdb 的调试器 trepan2适用于 Python2 和 trepan3k对于 Python3。

    emacs-dbgr/common/buffer/source.el有关源缓冲区的更多信息。

    关于python - 如何将现有缓冲区附加到 realgud 调试器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21443801/

    相关文章:

    python - 当我更新具有外键的模型对象时,Django 模型对象被删除

    python - 添加分隔符和删除逗号

    python - Django:我需要将两个外键值传递到我的数据库以跟踪评论和用户

    Python 正在工作 - 没有做任何更改 - 将不再工作。可能发生了什么?

    eclipse - 任何类似于 Emacs 对 Eclipse 的缓冲区/窗口支持的东西?

    emacs - 如何自定义 Emacs 界面,特别是 Windows 中的选项卡字体?

    python - Python 中的 SVD 图像重建

    c++ - 使用 GetProc 从 dll 中获取函数并单步执行它们?

    ios - iCloud 和 Core Data - 如何调试?

    javascript - 人们在使用 Emacs 编辑包含 CSS、javascript 和 HTML 的网页时使用什么模式?