2011-07-19 1 views
4

J'ai une variable globale dont le nom a plusieurs symboles et je veux les imprimer tous. Exemple:Dans GDB comment puis-je résoudre les symboles en double

(gdb) info var g_reallocCount 
All variables matching regular expression "g_reallocCount": 

File sv.c: 
long int g_reallocCount; 
long int g_reallocCount; 
long int g_reallocCount; 
long int g_reallocCount; 

lorsque je tente d'utiliser « print g_reallocCount » i obtenir un seul résultat, et ce n'est pas celui que j'ai besoin.

Je crois que la raison pour laquelle j'ai plusieurs symboles est que la bibliothèque statique que je change est liée à plusieurs modules chargés. En ce moment, je ne suis pas sûr de pouvoir changer ce fait.

grâce

Répondre

1

Modifier: pour une raison quelconque je ne ai pas envisager un moyen plus facile initally ... en supposant liaison c.

(gdb) shell nm /path/to/stuff | grep g_reallocCount | cut -d' ' -f1 >>foo 
(gdb) shell cat foo | awk '{print "p *0x" $0}' >foo.gdb 
(gdb) source foo.gdb 
$4 = 0 
$5 = 0 
$6 = 0 

réponse originale, prémisse similaire: Faute d'une meilleure idée, vous pouvez copier le fichier binaire/bibliothèque et dépouillant des symboles de débogage avec la commande de bande, gdb alors sortie l'adresse du symbole « information var » et vous pouvez l'imprimer avec impression * 0xaddr

Je viendrai avec un patch pour imprimer l'adresse de la variable dans « information var », lorsque des symboles de débogage sont disponibles.

Si vous proposez un test de test minimal pour reproduire ceci, pensez à l'envoyer à la liste gdb ou à l'associer à un rapport de bogue.

Merci!

+0

Ceci est un problème à ce stade. Un cas de test le plus simple consisterait à déclarer une variable cachée dans une bibliothèque partagée et une variable statique portant le même nom dans un fichier binaire exécutable lié à une telle bibliothèque. –

Questions connexes