如何从emacs中的gdb获取输入(使用python脚本)

时间:2011-04-13 06:17:41

标签: python emacs gdb

我想使用python为gdb创建一些交互式脚本。它在gdb中运行良好,但如果我从emacs调用gdb,它就不起作用。

例如,python脚本(test.py)如下所示。它只是打印它得到的东西。

def testInput():
    n = raw_input('(gdb) ')
    print n

它适用于gdb:

% gdb
GNU gdb (GDB) 7.2.50.20110217
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) source test.py
(gdb) python testInput()
(gdb) 1
1
(gdb) q

但是在emacs中,它只会挂在“raw_input”中并且永远无法获得输入:

(gdb) source test.py
(gdb) python testInput()
(gdb) 1
2
...

有没有让它像gdb一样工作?

2 个答案:

答案 0 :(得分:1)

使用M-x gud-gdb调用gdb解决了我的问题。有关详细信息,请参阅Emacs手册的第27章。

希望两年后这仍然有用......

答案 1 :(得分:0)

当在emacs缓冲区中使用交互式外部进程时,模式需要能够在外部进程提示用户输入时从缓冲区中识别,以便它知道需要允许用户输入内容。否则,emacs将永远等待进程输出它识别的内容,并且进程将永远等待输入。由于您的python脚本使用不同的提示,因此emacs gdb模式永远不会识别正在请求输入。

尝试修改gdb-prompt-name-regexp的值。这是gdb-mi.el的默认值:

(defvar gdb-prompt-name-regexp "value=\"\\(.*?\\)\"")