2011-04-13 52 views
1

我想使用python为gdb创建一些交互式脚本。它在gdb中运行良好,但如果我通过emacs调用gdb,则不起作用。如何从gdb中获取输入(使用python脚本)

例如,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一样工作?

回答

0

当Emacs的缓冲区使用交互式外部进程,模式需要能够在外部过程后,提示输入用户从缓冲区认识,以便它知道它需要让用户输入的东西。否则,emacs将会永远等待进程输出可识别的内容,并且该进程将永久等待输入。由于您的python脚本使用不同的提示,因此emacs gdb模式永远不会识别输入被请求。

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

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

的问题是从你的脚本的提示,你需要的正则表达式匹配你需要的emacs认识到作为提示所有的东西。 – 2011-09-02 05:53:32

+0

我改变了脚本,所以它使用与原始gdb相同的提示符,但它仍然不起作用。 – vicshen 2011-09-02 05:58:40

+0

啊,对不起,误解了你以前的评论。没有线索。 – 2011-09-02 06:10:14

1

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

希望这仍然是两年后有帮助...

相关问题