Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将现有缓冲区附加到realgud调试器?_Python_Debugging_Emacs - Fatal编程技术网

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

Python 如何将现有缓冲区附加到realgud调试器?,python,debugging,emacs,Python,Debugging,Emacs,我开始在GNU Emacs 24.3.1中使用realgud,作为GUD的替代品。(主要是因为当我用香草pdb设置断点时,它不遵守。) 我正在用pdb bin/start\u OpenERP启动OpenERP web服务器,它将打开主脚本。但是我需要能够在我正在处理的缓冲区中放置断点 我需要知道如何将缓冲区附加到调试器 有关我的环境的更多详细信息 对于OpenERP开发,我正在使用和。这将创建bin/start\u openerp脚本,该脚本重写sys.path以匹配我的构建环境 我正在开发几个

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

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

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

有关我的环境的更多详细信息 对于OpenERP开发,我正在使用和。这将创建
bin/start\u openerp
脚本,该脚本重写
sys.path
以匹配我的构建环境

我正在开发几个OpenERP的自定义插件。因此,当我需要进入调试器会话以解决问题时,我正在编辑一些。我做了以下工作:

  • 编辑我的缓冲区并保存它们
  • 运行
    pdb-bin/start\u-openerp
    。这将在
    快捷键处于激活状态时打开脚本

  • 如果我在realgud缓冲区上执行
    break file:lineno
    命令,它将工作,并且中断将得到尊重。但是我需要转到一个缓冲区,在某一行中设置断点。

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

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

    调试多个Python会话时,有多个命令缓冲区。在运行Python程序的过程中,可能有几个命令缓冲区在某个时候引用了相同的Python源代码。因此,从Python源代码的缓冲区中,如何区分希望断点出现在几个Python会话中的哪个会话

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

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

    但是假设有几个会话,并且您在一个源代码缓冲区中,不知道哪个命令缓冲区与之关联?Emacs命令和函数realgud:srcbuf info description从源代码缓冲区内部运行时,将显示有关源代码缓冲区的信息,包括与之关联的命令缓冲区

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

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

    最后,让我为Python2和Python3插入一个类似pdb和gdb的调试器


    有关源缓冲区的更多信息,请参阅。

    我看到了。。。但我可以通过自己做一些elisp来克服这一点:一个简单的函数,它要求cmdbuf使用(使用dash.el):
    (-select-realgud-cmdbuf?(缓冲区列表))
    ;如果只有一个cmdbuf(对我来说,这是99.99%的时间),则使用
    realgud scrbuf init或update
    将当前源缓冲区附加到该cmdbuf。请参阅要点:它有时有效。我还没能准确地发现什么时候。。。它从不在srcbuf上设置短键次要模式,但有时执行
    realgud cmd break
    do会放置断点…哇!我对dash和Grizzle都不了解,都很酷。将很快在gist中对该代码进行讨论。当这起作用时,也许我们可以将类似的内容返回到realgud中。我最近添加了
    realgud:cmdbuf associate
    ,它接受当前缓冲区(假定为源代码缓冲区),并将提示命令缓冲区与该源代码相关联。然后打开短键模式。好了,开始工作了!正如这里的维基所解释的那样:。像往常一样启动trepan(2),然后打开您想要插入的源文件,并执行“C-XC-ACQ”。然后我要求我关联到trepan2 shell过程,我按下enter键。之后,快捷键模式在文件中变为活动状态,我可以用“b”放置断点。万岁!