2009-09-24 7 views

Répondre

126
  1. backtrace complet: complet backtrace avec des variables locales
  2. jusqu'à, vers le bas, cadre: Déplacez-vous dans les cadres
  3. montre: Suspendre le processus lorsqu'une certaine condition est remplie
  4. print set assez sur: Imprime bien formatés code source C
  5. exploitation forestière définie sur: Log session de débogage pour montrer aux autres pour le soutien
  6. matricielleEnsemble d'impression sur: array Jolie impression
  7. finition: Continuer jusqu'à la fin de la fonction
  8. permettent et désactiver: Enab le/désactiver les points d'arrêt
  9. tbreak: Pause une fois, puis retirez le point d'arrêt
  10. : Numéro de la ligne en cours d'exécution
  11. informations habitants: Voir toutes les variables locales
  12. informations args : Voir tous les arguments de fonction
  13. liste: voir la source
  14. RBREAK: pause sur la fonction correspondant à l'expression régulière
+5

'info locals' - Voir toutes les variables locales; liste - voir la source; rbreak - pause sur la fonction correspondant à l'expression régulière. –

+0

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

+1

'set set object on' pour les éléments polymorphes et' set print elements 0' sont deux commandes que j'utilise très souvent. Assez utile. –

13

thread apply all bt ou thread apply all print $pc: Pour trouver rapidement ce que toutes les discussions sont en train de faire.

+0

C'était la commande que je cherchais depuis longtemps! Il est vraiment désagréable de vérifier tous les 30 fils un par un! – tothphu

+0

Prénom: t a a bt. –

94

Démarrer gdb avec une interface utilisateur textuelle

gdb -tui 
+18

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

+21

ou juste C-x C-a – elmarco

+0

Merci Vous avez sauvé beaucoup de mon temps .. Merveilleux .... – sujin

42

À partir de gdb 7.0, il y a reversible debugging, afin que vos nouvelles commandes favorites 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. 
18

Au lieu de lancer GDB avec "-tui" param vous pouvez aussi passer en mode texte après un certain temps en tapant "wh".

+3

Comment changer de place? –

+3

Ctrl-a a pour revenir à la vue en ligne de commande "normale"! – Kevin

+2

"- 'peut être utilisé avec" wh "plus court sera le meilleur .. :) –

5

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

+1

Comment définir le verrouillage du planificateur? –

+3

'set scheduler-locking on' à l'intérieur de gdb – Ben

+0

Comment faites-vous cela par défaut? Je l'ai essayé .gdbinit mais gdb imprime /home/omry/.gdbinit:1: Erreur dans le fichier de commande source: La cible 'Aucun' ne peut pas supporter cette commande. –

3
  • En utilisant .gdbinit (fichier de démarrage où vous pouvez écrire des macros et appeler depuis gdb). Placez .gdbinit dans votre répertoire personnel afin qu'il soit ramassé chaque fois gdb est chargé
  • d'info threads à la liste tous les fils actifs, et f (#) -> # Numéro de fil que vous souhaitez passer à

  • quelque temps j'utiliser gdb pour convertir hexadécimal en décimal ou binaire, son très pratique au lieu d'ouvrir une calculatrice

    • p/d 0x10 -> donne équivalent décimal de 0x10
    • p/t 0x10 - > équivalent binaire de 0x10
    • p/x 256 -> hex équivalent de 256
6

En utilisant l'option -command=<file with gdb commands> lors du tir gdb. Identique à -x <command file>. Ce fichier de commande 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 en utilisant gdb.

+0

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

2

Cela peut être utile, je suis sûr qu'il pourrait être amélioré si, aide bienvenue:

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

Au lieu de démarrer gdb avec l'option -tui pour voir un processus enfant contenant un écran qui met en évidence l'emplacement de la ligne de code dans votre programme, entrez et sortez de cette fonction avec Cx o et Cx a. Ceci est utile si vous utilisez la fonction et que vous ne l'utilisez pas temporairement, vous pouvez donc utiliser la flèche vers le haut pour obtenir une commande précédente.

+2

vous pouvez changer le focus à la fenêtre de commande en utilisant 'focus cmd' de sorte que les flèches haut/bas fonctionnent. Vous revenez en utilisant 'src focus '. –