gdbにコマンド履歴を保存させるにはどうすればよいですか?


195

gdbコマンド履歴を保存するように設定するにはどうすればよいですか?新しいgdbセッションを開始するときに、上矢印キーを使用して前のセッションのコマンドにアクセスしたいと思います。


1
注:.gdbinitLinuxでは、ファイルは他のユーザーによって書き込み保護されている必要があります。
urzeit 2013

@urzeit-Ubuntuのようなディストリビューションでは失われた原因だと思います。デフォルトでは、だれでも他のユーザーのホームディレクトリにアクセスできます。
jww

@jww .gdbinit権限が正しく設定されていない場合、ファイルは処理されません。デフォルトで何が使用されているか、またはホームディレクトリで他にどのような制限がシステムで使用されているかは関係ありません。
urzeit

@urzeit .gdbinitファイルを作成してもそれが当てはまらない場合は、のumaskような適切な値に設定されていないことを意味します022。次に、マルチユーザーシステムでは、.gdbinitファイルだけでなく、より大きな問題が発生します。
Kaz

回答:


283

短い答え: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


長い答え:

コマンド履歴については、GDBのマニュアル「22.3コマンド履歴」で説明しています。ファイルを作成し、$HOME/.gdbinitその権限をに変更して0600、次のコンテンツを追加します。

set history save on

保存した過去のコマンド数を以下で設定できます。コマンドは、「gdbが履歴リストに保持するコマンドの数を設定します。これは、環境変数GDBHISTSIZEの値、またはこの変数が設定されていない場合は256に設定されます。GDBHISTSIZEの非数値は無視されます。サイズが無制限であるか、GDBHISTSIZEが負の数または空の文字列の場合、履歴リストにgdbが保持するコマンドの数は無制限です。

set history size <size>

関連するコマンドはset history remove-duplicates <count>です。コマンドは、「コマンド履歴リスト内の重複した履歴エントリの削除を制御します。countがゼロ以外の場合、gdbは最後のcount履歴エントリを調べ、現在のエントリと重複する最初のエントリを削除しますコマンド履歴リストに追加されます。カウントが無制限の場合、この後読みは無制限になります。カウントが0の場合、重複した履歴エントリの削除は無効になります

set history remove-duplicates <count>

デフォルトでは、gdbは履歴を現在のディレクトリの ./.gdb_historyファイルに保存ます。コマンド履歴が現在のディレクトリに依存しないようにするには、次も含めます。

set history filename ~/.gdb_history

4
これを自分で見つけて、SOで共有すると思いました。
フランク

3
次回は、非コミュニティwikiのような自己回答型の質問を作成することは完全に正当です。:)
グレッグ・ヒューギル2010

@フランク入力してnから上矢印キーを押すと、で始まる以前のすべてのコマンドが表示されnます。
SIFE 2013年

GDB 8.0.1では、これは特別なファイル権限なしで機能するようです。
Ryan1729 2017年

7

それでも問題が解決しない場合は、HISTSIZE環境変数が適切に高い数値であることを確認してください。鉱山が空だったため、gdbの「履歴サイズ」設定がデフォルトで0になりました。

追加されました

export HISTSIZE=100000000

私の〜/ .bashrcに、すべてがうねっています

(gdb内で) "show history"を実行すると、gdb履歴設定を確認できます。

gdb$ show history
expansion:  History expansion on command input is off.
filename:  The filename in which to record the command history is "/home/xiao/.gdb_history".
save:  Saving of the history record on exit is on.
size:  The size of the command history is 100000000.

ドキュメントから:

set history size size
set history size unlimited
GDBが履歴リストに保持するコマンドの数を設定します。これはデフォルトで環境変数HISTSIZEの値になり、この変数が設定されていない場合は256になります。サイズが無制限の場合、GDBが履歴リストに保持するコマンドの数は無制限です。


私も同じ問題を抱えていました。set history size 100.gdbinitファイルを配置したにもかかわらず、HISTSIZE環境変数が原因で履歴サイズがゼロに設定されていました。問題は、gdbがHISTSIZEを無制限に設定できることを
DavidW

gdbのHISTSIZEバグは2015年6月の時点修正されていますが、この変更がシステムにまだ存在する可能性は低いです。その間、HISTSIZEが設定されている場合、0より大きい必要があります。そうでない場合、gdbは履歴を無効にします。
ネイトR.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.