1

我想使用 gdb 调试一个 c++ 程序。我使用pipy命令从 gdb 中评估 python 命令,当我从命令行调用 gdb 时效果很好。但是,当我在 emacs 中使用M-x gdbthen调用 gdb 时gdb -i=mi file_name,会出现以下错误:

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

文件“stdin”,第 1 行
-interpreter-exec 控制台“2”
SyntaxError:无效语法

  • py命令适用于单个命令(如py print 2+2),但不适用于多个命令

我可以通过启动 gdb 来解决这些问题gud-gdb,但是我不支持gdb-many-windows. 也许问题是由输入后的提示引起的pi,不再是(gdb)而是>>>而是?

4

2 回答 2

1

我打算出去说这是 gud 模式下的错误。线索是-interpreter-exec错误中的行。

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

为了让 GUI 为用户提供控制台界面,MI 提供了-interpreter-exec命令,该命令使用其他一些 gdb“解释器”来评估命令(这并不意味着您可能会想什么,尤其与 Python 无关)。

因此,我相信 gud 使用-interpreter-exec console .... 但是,对于python命令的续行,这是错误的做法。

python我在 Emacs 中对此进行了尝试,当我将其拼写出来时,我能够使其适用于该命令——但是py, pi, 并且python-interactive都失败了。

于 2015-07-30T16:19:51.953 回答
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. 比我更了解这一点

于 2015-12-16T06:46:46.523 回答