GDB flèche vers le haut ne fonctionne pas

J'ai beaucoup cherché sur des problèmes similaires mais je n'ai rien trouvé. Lors de l'exécution de gdb je ne pouvais pas utiliser la flèche vers le haut pour marcher à travers les commands précédentes. Les flèches haut et bas sont simplement ignorées. J'ai commencé à observer ce comportement après le changement de certains parameters, mais je ne me souviens pas quels parameters ont été changés exactement.

Je n'ai pas de file ~/.xinputrc et $TERM est défini sur xterm .

Il pourrait en raison de votre taille d'historique est 0.

Vous pouvez vérifier la taille de votre historique gdb:

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

Si la taille maximale de l' historique est 0 , la flèche vers le haut ne fonctionne bien sûr pas, car aucun historique n'a pu être sauvegardé.

La raison principale que j'ai trouvé est parce que la variable d'environnement bash HISTSIZE est 0 ou vide. C'est frustrant parce que je pensais que HISTSIZE = ( valeur vide à droite) dans ~ / .bashrc peut faire l'historique bash sauvé des inputs illimitées , mais l'effet secondaire est gdb se référer à $ HISTSIZE et définir la taille de l'historique gdb à 0 sur le démarrage de gdb.

Donc, vous pouvez mettre HISTSIZE = 10000000 sur votre ~ / .bashrc et la flèche vers le haut devrait fonctionner maintenant ( WARN: sauvegardez votre ~ / .bash_history avant de jouer avec HISTSIZE):

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

Si vous insistez pour garder HISTSIZE = vide sur ~ / .bashrc, l'option est de créer cette fonction sur ~ / .bashrc:

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

. ~ / .bashrc pour recharger, maintenant il a changé:

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

Après la sortie de gdb, le $ HISTSIZE d'origine ne sera pas surchargé (c'est-à-dire rest vide comme illimité) car notre fonction gdb utilise le sous-shell, c.-à-d. Entre parenthèses, gdb

 $ echo $HISTSIZE $ 

Vous devez également activer l'historique à la sortie, puis penser à l'location du file d'historique. Voici mon file ~ / .gdbinit, créez-le s'il n'existe pas encore:

 $ 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 $ 

Vous pourriez requestr pourquoi définir l'environnement HISTSIZE 10000000 ne fonctionne pas? C'est parce que cela n'affecte que le programme, pas gdb lui-même, comme indiqué à la page http://www.delorie.com/gnu/docs/gdb/gdb_20.html :

Définissez la variable d'environnement varname sur value. La valeur change pour votre programme seulement, pas pour GDB lui-même.

Le correctif est disponible dès à présent, voir https://sourceware.org/bugzilla/show_bug.cgi?id=16999 :

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

… Ce patch rend le comportement de GDBHISTSIZE invalide cohérent avec la façon dont bash gère HISTSIZE. Lorsque nous rencontrons un GDBHISTSIZE nul ou hors plage (hors de [0, INT_MAX]), nous définissons maintenant la taille de l'historique sur illimitée au lieu de 0. Lorsque nous rencontrons un GDBHISTSIZE non numérique, nous ne faisons rien.

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

La prochaine version de GDB ne lira plus HISTSIZE du tout parce que cela cause plus de problèmes qu'elle ne résout. GDBHISTSIZE est plutôt lu dans le même but. Et pour faire bonne mesure, le comportement de GDBHISTSIZE correspondra à la façon dont bash lit HISTSIZE. Ainsi, si vous définissez GDBHISTSIZE sur -1, la taille de l'historique de GDB sera illimitée.