emacs中的gdb:python命令(py和pi)

时间:2015-07-20 10:58:46

标签: python emacs gdb gud

我想使用gdb调试c ++程序。我使用pipy命令来评估gdb中的python命令,当我从命令行调用gdb时,它可以正常工作。但是,当我使用M-x gdb然后gdb -i=mi file_name从emacs中调用gdb时,会发生以下错误:

  • pi命令正确打开了一个交互式python shell,但是对此shell的任何输入都会产生如下错误:
  

文件" stdin",第1行   -interpreter-exec console" 2"
  SyntaxError:语法无效

  • py命令可以正常运行单个命令(如py print 2+2),但不适用于多个命令

我可以通过使用gud-gdb启动gdb来解决这些问题,但之后我没有gdb-many-windows的支持。也许问题是由输入pi后的提示引起的,而(gdb)不再是>>>而是Replacing 'H' with '_H': _HeLLo Capital Letters Replacing 'L' with '_L': _He_L_Lo Capital _Letters Replacing 'L' with '_L': _He__L__Lo Capital __Letters Replacing 'C' with '_C': _He__L__Lo _Capital __Letters Replacing 'L' with '_L': _He___L___Lo _Capital ___Letters

2 个答案:

答案 0 :(得分:1)

我要走出去,说这是gud模式中的一个错误。线索是错误中的-interpreter-exec行。

这里发生的是gud以特殊的“MI”(“机器接口”)模式运行gdb。在这种模式下,命令及其响应被设计为机器的,而不是人类的,可读的。

为了让GUI为用户提供控制台界面,MI提供-interpreter-exec命令,该命令使用其他gdb“解释器”评估命令(这并不意味着您可能会想到的,特别是对于做Python)。

因此,gud将用户输入发送到gdb,我相信,-interpreter-exec console ...。但是,对于python命令的延续行,这是错误的。

我在Emacs中尝试了这一点,当我拼出它时,我能够使它适用于python命令 - 但是pypi和{{1}都失败了。

答案 1 :(得分:0)

当我使用gdb 7.9.1构建和使用emacs 24.5.1时,我遇到了这个问题。

我对gdb命令行没有问题,但gdb-emacs的行为很奇怪。

我得到Tom和user280107描述的行为,具体取决于命令和操作的顺序:

(gdb) pi
>>> print(123)
  File "<stdin>", line 1
    -interpreter-exec console "print(123) "
                            ^
SyntaxError: invalid syntax
>>> 

但是,如果我先运行'python xxx'命令,它似乎有用(有些忘记了初始化?):

(gdb) python print(123)
123
(gdb) pi
pi
>>> print(123)
123
>>> 

无论如何,我已经发了一封电子邮件给emacs-devel@gnu.org。

顺便说一下,我确信Tom T.比我更了解这个问题