2011-04-13 12 views
1

gdb用の対話型スクリプトを作成するためにpythonを使いたいです。 gdbでうまく動作しますが、emacsからgdbを呼び出すと動作しません。emacsで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からデフォルト値があります:M-x gud-gdbでGDBを起動

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

問題は、スクリプトからのプロンプトで、これはまだ2年後に便利です

希望は...、あなたはEmacsがプロンプトとして認識するために必要なすべてのものと一致する正規表現を必要としています。 –

+0

元のgdbと同じプロンプトを使用するようにスクリプトを変更しますが、それでも動作しません。 – vicshen

+0

ああ、申し訳ありませんが、あなたの前のコメントを誤解しました。その後、手がかりはありません。 –

1

は私のために問題を解決しました。詳細については、Emacsマニュアルの第27章を参照してください。

関連する問題