我想使用gdb调试c ++程序。我使用pi
和py
命令来评估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
?
答案 0 :(得分:1)
我要走出去,说这是gud模式中的一个错误。线索是错误中的-interpreter-exec
行。
这里发生的是gud以特殊的“MI”(“机器接口”)模式运行gdb。在这种模式下,命令及其响应被设计为机器的,而不是人类的,可读的。
为了让GUI为用户提供控制台界面,MI提供-interpreter-exec
命令,该命令使用其他gdb“解释器”评估命令(这并不意味着您可能会想到的,特别是对于做Python)。
因此,gud将用户输入发送到gdb,我相信,-interpreter-exec console ...
。但是,对于python
命令的延续行,这是错误的。
我在Emacs中尝试了这一点,当我拼出它时,我能够使它适用于python
命令 - 但是py
,pi
和{{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.比我更了解这个问题