Commandes les plus délicates / utiles pour le débogueur gdb [fermé]


138

Pouvez-vous publier vos commandes les plus délicates et les plus utiles pendant que vous exécutez un débogueur comme gdb ou dbx.


J'ai trouvé que cette documentation est bonne. scc.ustc.edu.cn/zlsc/sugon/intel/debugger/cl/…
Rick

Réponses:


134
  1. backtrace full : traçage complet avec des variables locales
  2. haut , bas , cadre : se déplacer dans les cadres
  3. watch : suspendre le processus lorsqu'une certaine condition est remplie
  4. set print pretty on : imprime le code source C joliment formaté
  5. définir la connexion : journal de la session de débogage à montrer aux autres pour obtenir de l'aide
  6. définir la matrice d'impression sur : impression jolie matrice
  7. terminer : continuer jusqu'à la fin de la fonction
  8. activer et désactiver : activer / désactiver les points d'arrêt
  9. tbreak : interrompre une fois, puis supprimer le point d'arrêt
  10. : numéro de ligne en cours d'exécution
  11. infos locales : afficher toutes les variables locales
  12. info args : afficher tous les arguments de fonction
  13. liste : afficher la source
  14. rbreak : pause sur la fonction correspondant à une expression régulière

7
info locals- Afficher toutes les variables locales; list - afficher la source; rbreak - pause sur la fonction correspondant à une expression régulière.
Paul Biggar

source / chemin / vers / macro / fichier Et toutes mes macros astucieuses sont là pour m'aider à déboguer en quelques secondes.
Sudhanshu

1
set print object onpour les éléments polymorphes et ce set print elements 0sont deux commandes que j'utilise très souvent. Assez utile.
Kiril Kirov

1
Aussi, t a a bt(sens thread apply all backtrace). Peut être utilisé avec (presque) toutes les autres commandes. Particulièrement utile avec bt full.
Kiril Kirov

101

Démarrez gdb avec une interface utilisateur textuelle

gdb -tui

21
Je ne peux pas croire que cette fonctionnalité m'ait échappé pendant toutes ces années. Merci merci merci!
DevSolar

Merci Vous avez économisé beaucoup de mon temps .. Wonderfull ....
sujin

1
Et un autre: <minus> RET
SullX

1
ou utilisez cgdb
Patryk

très belles fonctionnalités.
J'ai

45

À partir de gdb 7.0, il existe un débogage réversible , donc vos nouvelles commandes préférées sont:

* reverse-continue ('rc') -- Continue program being debugged but run it in reverse
* reverse-finish -- Execute backward until just before the selected stack frame is called
* reverse-next ('rn') -- Step program backward, proceeding through subroutine calls.
* reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines.
* reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line
* reverse-stepi -- Step backward exactly one instruction
* set exec-direction (forward/reverse) -- Set direction of execution.

21

Au lieu de lancer GDB avec le paramètre "-tui", vous pouvez également passer en mode texte après un certain temps en utilisant en tapant "wh".


3
Ctrl-a a pour revenir à la vue de ligne de commande «normale»!
Kevin

2
"- 'peut être utilisé à l'instaed de' wh '. Plus court, mieux c'est .. :)
raj_gt1

6
Ctrl-a a? C'est une blague? Ressemble plus à tmux/ screencommand. Et ne fonctionne pas pour moi. Il doit être l' un comme par docs : C-x C-a, C-x a, C-x A.
x-yuri

C'est en fait C-x a. Vous pouvez également changer de vue avec C-x 1et C-x 2en mode tui pour voir également l'assemblage (si nécessaire).
Sam Whitlock

16

thread apply all btou thread apply all print $pc: Pour découvrir rapidement ce que font tous les threads.


C'était la commande que je recherchais depuis longtemps! C'est vraiment méchant de vérifier les 30 fils un par un!
tothphu


6

Utilisation de l' -command=<file with gdb commands>option lors du lancement de gdb. Identique à -x <command file>. Ce fichier de commandes peut contenir des commandes gdb comme des points d'arrêt, des options, etc. Utile dans le cas où un exécutable particulier doit être soumis à des exécutions de débogage successives à l'aide de gdb.


Vous pouvez également utiliser l' -iexoption pour ajouter des commandes individuelles sur la ligne de commande gdb.
doug65536

5

le script gdb est une bonne astuce, à part cela, j'aime activer / désactiver le verrouillage du programmateur pour empêcher l'exécution d'autres threads lorsque vous en entrez un.


1
Comment définir le verrouillage du planificateur?
deft_code

3
set scheduler-locking oninside gdb
Ben

comment en faire la valeur par défaut? Je l'ai essayé .gdbinit mais gdb imprime /home/omry/.gdbinit:1: Erreur dans le fichier de commande source: La cible «None» ne peut pas prendre en charge cette commande.
Omry Yadan

4
  • Utilisation de .gdbinit (fichier de démarrage dans lequel vous pouvez écrire des macros et appeler depuis gdb). Placez .gdbinit dans votre répertoire personnel afin qu'il soit récupéré à chaque chargement de gdb
  • fils d'information pour lister tous les threads actifs, et f (#) -> # numéro de thread que vous voulez basculer

  • parfois, j'utilise gdb pour convertir de l'hexagone en décimal ou binaire, c'est très pratique au lieu d'ouvrir une calculatrice

    • p / d 0x10 -> donne l'équivalent décimal de 0x10
    • p / t 0x10 -> équivalent binaire de 0x10
    • p / x 256 -> équivalent hexadécimal de 256

4

Au lieu de démarrer gdb avec l'option -tui pour voir un processus enfant qui contient un écran qui met en évidence où se trouve la ligne de code en cours d'exécution dans votre programme, entrez et sortez de cette fonctionnalité avec Cx o et Cx a. Ceci est utile si vous utilisez la fonctionnalité et que vous ne devez pas l'utiliser temporairement afin que vous puissiez utiliser la flèche vers le haut pour obtenir une commande précédente.


2
vous pouvez changer le focus sur la fenêtre de commande en utilisant de focus cmdsorte que les flèches haut / bas fonctionnent. Vous revenez en utilisant focus src.
Nathan Fellman

3

Cela peut être utile, je suis sûr que cela pourrait être amélioré, aidez-nous à accueillir:

define mallocinfo
  set $__f = fopen("/dev/tty", "w")
  call malloc_info(0, $__f)
  call fclose($__f)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.