Comment puis-je faire en sorte que gdb enregistre l'historique des commandes?

195

Comment puis-je configurer gdbpour qu'il enregistre l'historique des commandes? Lors du démarrage d'une nouvelle gdbsession, j'aimerais utiliser les touches fléchées vers le haut pour accéder aux commandes des sessions précédentes.

Franc
la source
1
Remarque: le .gdbinitfichier doit être protégé en écriture par d'autres personnes que vous sur Linux.
urzeit
@urzeit - Je pense que c'est une cause perdue sur des distributions comme Ubuntu. Ils autorisent n'importe qui dans le répertoire personnel de n'importe qui d'autre par défaut.
2016
@jww Le .gdbinitfichier n'est pas traité si les autorisations ne sont pas configurées correctement, quelle que soit la valeur par défaut ou quelles autres limitations sur les répertoires personnels sont utilisées par le système.
urzeit
@urzeit Si vous créez un .gdbinitfichier et que ce n'est pas le cas, cela signifie que votre umaskn'est pas défini sur une valeur saine comme 022. Ensuite, dans un système multi-utilisateur, vous avez des problèmes plus importants que votre .gdbinitfichier.
Kaz

Réponses:

283

Réponse courte: echo 'set history save on' >> ~/.gdbinit && chmod 600 ~/.gdbinit


Longue réponse:

L'historique des commandes est traité dans le manuel GDB, 22.3 Historique des commandes . Créez un fichier $HOME/.gdbinit, modifiez ses autorisations en 0600et ajoutez le contenu suivant:

set history save on

Vous pouvez définir le nombre de commandes passées enregistrées avec les éléments suivants. La commande est décrite comme "Définissez le nombre de commandes que gdb conserve dans sa liste d'historique. La valeur par défaut est la valeur de la variable d'environnement GDBHISTSIZE, ou 256 si cette variable n'est pas définie. Les valeurs non numériques de GDBHISTSIZE sont ignorées. Si la taille est illimitée ou si GDBHISTSIZE est soit un nombre négatif, soit une chaîne vide, le nombre de commandes que gdb conserve dans la liste historique est illimité " .

set history size <size>

Une commande connexe est set history remove-duplicates <count>. La commande est décrite comme "Contrôler la suppression des entrées d'historique en double dans la liste de l'historique des commandes. Si le nombre est différent de zéro, gdb reviendra sur les dernières entrées d'historique de comptage et supprimera la première entrée qui est un double de l'entrée en cours ajouté à la liste de l'historique des commandes. Si le nombre est illimité, ce retard est illimité. Si le nombre est 0, la suppression des entrées d'historique en double est désactivée " .

set history remove-duplicates <count>

Par défaut, gdb enregistre l'historique dans le fichier ./.gdb_history dans le répertoire courant . Si vous souhaitez que votre historique de commandes ne dépende pas du répertoire dans lequel vous vous trouvez, incluez également:

set history filename ~/.gdb_history
jww
la source
4
Je viens de découvrir cela par moi-même et j'ai pensé le partager sur SO.
Frank
3
Pour la prochaine fois, il est parfaitement légitime de créer des questions à réponse libre comme un wiki non communautaire. :)
Greg Hewgill
@Frank Que diriez-vous si je tape npuis je touche flèche vers le haut, j'obtiens toutes les commandes précédentes qui commencent par n.
SIFE
Sur GDB 8.0.1, cela semble fonctionner sans les autorisations spéciales sur les fichiers.
Ryan1729
7

Si vous rencontrez toujours des problèmes, assurez-vous que votre variable d'environnement HISTSIZE est suffisamment élevée. Le mien était vide, ce qui faisait que le paramètre "taille d'historique" de gdb était réglé par défaut sur 0.

Ajoutée

export HISTSIZE=100000000

à mon ~ / .bashrc et tout est gonflé

Vous pouvez vérifier vos paramètres d'historique gdb en faisant (à l'intérieur de gdb) "afficher l'historique":

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.

De la documentation :

set history size size
set history size unlimited
Définissez le nombre de commandes que GDB conserve dans sa liste d'historique. Il s'agit par défaut de la valeur de la variable d'environnement HISTSIZE, ou de 256 si cette variable n'est pas définie. Si la taille est illimitée, le nombre de commandes que GDB conserve dans la liste historique est illimité.

Xiao
la source
J'ai eu le même problème. Malgré la mise set history size 100dans le fichier .gdbinit, la variable d'environnement HISTSIZE provoquait toujours la mise à zéro de la taille de l'historique. Le problème est que gdb ne comprend pas que HISTSIZE peut être défini sur illimité
DavidW
Le bogue HISTSIZE dans gdb a été corrigé en juin 2015 , mais il est probable que cette modification ne soit pas encore présente sur votre système. En attendant, s'il HISTSIZEest défini, il doit être> 0 , sinon gdb désactivera l'historique.
Nate R.