2009-01-24 6 views
8

Comment puis-je demander à afficher plusieurs variables dans une ligne? Donc, je veux obtenir une sortie comme:En utilisant gdb, afficher plusieurs vars dans une ligne?

30  if(s[i] != '\0') 
5: s[i] = 101 'e' 
4: exp = 14 
3: val = 123.45 
2: sign = 1 
1: i = 6 

J'ai taper dans DISP s [i] ENTER AFF exp ENTRER (etc, etc) et je sais juste il doit y avoir une meilleure façon de le faire dans une ligne de frappe.

+0

C'est un titre très utile que vous avez ici. –

+0

C'est une bonne question mais avec un mauvais titre ... – Johan

+0

Édité le titre – ChrisW

Répondre

9

Pour établir plusieurs "affichages variables" actifs sans ressaisir chacun des codes display i, display s[i], etc., chaque fois que vous redémarrez GDB, utilisez une "séquence de commandes prédéfinies" GDB.

Par exemple, ajoutez à votre ~/.gdbinit:

define disp_vars 
    disp i 
    disp sign 
    disp val 
    disp exp 
    disp s[i] 
end 

Maintenant, vous pouvez ajouter tous les écrans à la fois en tapant disp_vars à l'invite GDB.

+0

Merci, mais l'affichage continue à afficher les variables comme je traverse. Je devrais couper n passé le printf pour chaque étape à travers! – Rob

+0

Ne tenez pas compte de mon commentaire ci-dessus car vous avez changé la réponse d'un simple printf à la solution. Merci. Je marque votre réponse comme une solution! – Rob

4

Employé russe a donné la bonne solution, mais pour ceux qui veulent le voir utilisé dans un exemple, voir ci-dessous. Si vous n'êtes pas sûr de vouloir valider l'extension .gdbinit dans votre répertoire personnel, vous pouvez également l'installer dans le répertoire dans lequel vous exécutez le programme.

$ gcc -g atof_ex4.2.c 
$ gdb ./a.out 
(gdb) b 30 
Breakpoint 1 at 0x1907: file atof_ex4.2.c, line 30. 
(gdb) h user-defined 
List of commands: 
disp_vars -- User-defined 
(gdb) disp_vars #this will enable the user defined canned sequence (but I haven't done run yet! So I'll this actually doesn't work yet.) 
No symbol "i" in current context. 
(gdb) r 
Starting program: a.out 
Breakpoint 1, atof (s=0xbffff028 "123.45e-6") at atof_ex4.2.c:30 
30  if(s[i] != '\0') 
(gdb) s # No disp_vars output yet because I have to do it AFTER 'run' command 
32   if(s[i] == 'e' || s[i] == 'E') 
(gdb) disp_vars # Now it will work ;) 
(gdb) s 
35    sign = (s[i] == '-') ? -1 : 1; 
5: s[i] = 45 '-' 
4: exp = 14 
3: val = 123.45 
2: sign = 1 
1: i = 7 

Bien sûr « r » est pour la course, « s » est pour l'étape, « b » est pour la pause, etc. J'ai aussi ignoré certaines sorties. Notez que j'ai dû entrer à nouveau la commande 'disp_vars' après 'run'. Merci Employé Russe.

Questions connexes