GDBの上矢印が機能しません。

GDBの上矢印が機能しません。

同様の質問をたくさん検索しましたが、何も見つかりませんでした。 gdbを実行すると、上矢印を使用して前のコマンドに移動できません。上下の矢印は無視されます。一部の設定を変更した後、この動作を観察し始めましたが、どの設定を変更したかを正確に覚えていません。

~/.xinputrcファイルがなく、$TERMに設定されていますxterm

答え1

それはおそらく、記録サイズが0であるからです。

gdbの履歴サイズを確認できます。

(gdb) show history size
The size of the command history is 0.
(gdb) 

もし記録の最大サイズは0です。、その後上矢印もちろん、履歴を保存できないので動作しません。

私が見つけた主な理由は、bash環境変数HISTSIZEが0または空であるためです。思うから苦しいです記録サイズ=NULL値右) bash レコードは ~/.bashrc に保存できます。無制限の立場、しかし副作用は、gdbが$ HISTSIZEを参照してgdb履歴サイズを0に設定することです。gdbが起動したとき。

だからあなたは置くことができます記録サイズ=10000000~/.bashrcでは、上矢印が機能します(警告する: ~/.bash_historyをバックアップしてください。HISTSIZEを使用する前):

(gdb) show history size 
The size of the command history is 10000000.
(gdb) 

頑張るなら記録サイズ=~/.bashrc は空です。オプションは ~/.bashrc にこの関数を生成することです。

gdb() ( HISTSIZE=70000000; /usr/bin/gdb "$@"; )

。 ~/.bashrc再読み込みし、今変更されました。

(gdb) show history size 
The size of the command history is 70000000.
(gdb) 

gdbを終了した後、元の$ HISTSIZEは上書きされません(つまり、制限なしで空のまま)。 gdb関数はサブシェルを使用するためです。つまり、括弧で囲まれた gdb() (...):

$ echo $HISTSIZE

$ 

また、終了時に履歴を有効にして履歴ファイルを保存する場所も考慮する必要があります。ここに私の〜/ .gdbinitファイルがあります。まだなければ、新たに作りましょう。

$ cat ~/.gdbinit 
set environment HISTSIZE 10000000
set history filename ~/.gdb_history
set history save on
set history size 10000000
set history expansion on
show history

$ 

なぜかと聞くことができる環境設定 HISTSIZE 10000000動作しない?これは、ページに示すように、gdb自体ではなくプログラムにのみ影響を与えるためです。http://www.delorie.com/gnu/docs/gdb/gdb_20.html:

環境変数varnameをvalueに設定します。この値は、GDB自体ではなくプログラムに対してのみ変更されます。

これでパッチを使用できます。https://sourceware.org/bugzilla/show_bug.cgi?id=16999:

2015-06-17 18:14:09 UTC:

...このパッチは、間違ったGDBHISTSIZEの動作をbashがHISTSIZEを処理する方法と一貫しています。 NULL値または範囲外のGDBHISTSIZE([0、INT_MAX]の外側)が発生した場合は、記録サイズを0の代わりに無制限に設定します。数字ではなくGDBHISTSIZEに会うと何もしません。

2015-06-17 18:30:10 UTC:

次のバージョンのGDBでは、HISTSIZEは読み込まれなくなりました。これは、解決するよりも多くの問題が発生するためです。代わりに、同じ目的でGDBHISTSIZEを読みます。良い測定のために、GDBHISTSIZEの動作はbashがHISTSIZEを読み取る方法と一致するため、GDBHISTSIZEを-1に設定するとGDBの履歴サイズが無制限になります。

関連情報