GDB-Aufwärtspfeil funktioniert nicht

GDB-Aufwärtspfeil funktioniert nicht

Ich habe viel nach ähnlichen Problemen gesucht, aber nichts gefunden. Beim Ausführen von gdb konnte ich den Aufwärtspfeil nicht verwenden, um durch vorherige Befehle zu gehen. Aufwärts- und Abwärtspfeile werden einfach ignoriert. Ich habe begonnen, dieses Verhalten nach der Änderung einiger Einstellungen zu beobachten, aber ich erinnere mich nicht, welche Einstellungen genau geändert wurden.

Ich habe keine ~/.xinputrcDatei und $TERMes ist auf eingestellt xterm.

Antwort1

Dies kann daran liegen, dass Ihre Verlaufsgröße 0 ist.

Sie können die Größe Ihres GDB-Verlaufs überprüfen:

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

Wenn dasDie maximale Größe des Verlaufs beträgt 0, DannAufwärtspfeilfunktioniert natürlich nicht, da kein Verlauf gespeichert werden konnte.

Der Hauptgrund, den ich gefunden habe, ist, dass die Bash-Umgebungsvariable HISTSIZE 0 oder leer ist. Es ist frustrierend, weil ich dachteHISTSIZE=(leerer Wertrechts) in ~/.bashrc kann die Bash-Historie speichernUnbegrenzte Einträge, Aberder Nebeneffekt ist, dass gdb auf $HISTSIZE verweist und dann die gdb-Verlaufsgröße auf 0 setztbeim GDB-Start.

Sie können alsoHISTSIZE=10000000auf Ihrer ~/.bashrc und der Aufwärtspfeil sollten jetzt funktionieren (WARNEN: Sichern Sie Ihre ~/.bash_historybevor Sie mit HISTSIZE herumspielen):

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

Wenn Sie darauf bestehen,HISTSIZE=leer auf ~/.bashrc, dann besteht die Möglichkeit, diese Funktion auf ~/.bashrc zu erstellen:

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

. ~/.bashrczum Neuladen, jetzt hat es sich geändert:

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

Nach dem Beenden von gdb wird das ursprüngliche $HISTSIZE nicht überschrieben (bleibt also leer, da unbegrenzt), da unsere gdb-Funktion eine Subshell verwendet, also in Klammern gdb() (...) verwendet:

$ echo $HISTSIZE

$ 

Sie müssen auch den Verlauf beim Beenden aktivieren und dann überlegen, wo die Verlaufsdatei gespeichert werden soll. Folgendes ist meine ~/.gdbinit-Datei. Erstellen Sie sie, falls sie noch nicht vorhanden ist:

$ 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

$ 

Sie fragen sich vielleicht, warumsetze Umgebung HISTSIZE 10000000funktioniert nicht? Das liegt daran, dass es nur das Programm betrifft, nicht gdb selbst, wie auf Seite angegebenhttp://www.delorie.com/gnu/docs/gdb/gdb_20.html:

Setzen Sie die Umgebungsvariable varname auf den Wert. Der Wert ändert sich nur für Ihr Programm, nicht für GDB selbst.

Der Patch ist jetzt verfügbar, siehehttps://sourceware.org/bugzilla/show_bug.cgi?id=16999:

17.06.2015 18:14:09 UTC:

... Dieser Patch macht das Verhalten von ungültigem GDBHISTSIZE konsistent mit der Art und Weise, wie Bash HISTSIZE behandelt. Wenn wir auf ein Null- oder außerhalb des Bereichs liegendes GDBHISTSIZE (außerhalb von [0, INT_MAX]) stoßen, setzen wir die Verlaufsgröße jetzt auf unbegrenzt statt auf 0. Wenn wir auf ein nicht numerisches GDBHISTSIZE stoßen, tun wir nichts.

17.06.2015 18:30:10 UTC:

Die nächste Version von GDB wird HISTSIZE überhaupt nicht mehr lesen, da dies mehr Probleme verursacht als löst. Stattdessen wird GDBHISTSIZE zum gleichen Zweck gelesen. Und um sicherzugehen, wird das Verhalten von GDBHISTSIZE dem entsprechen, wie Bash HISTSIZE liest. Wenn GDBHISTSIZE also auf -1 gesetzt wird, ist die Verlaufsgröße von GDB unbegrenzt.

verwandte Informationen