2010-10-25 12 views
5

J'ai essayé de lancer valgrind (memcheck et massif) sur une application que j'ai écrite, mais tout ce que je reçois sont des adresses pour les fonctions exécutées.Valgrind ne retournera pas les lignes source!

--------------------------------- 
Context accounted for 0.6% of measured spacetime 
    0x805F29A: (within prog_name) 
    0x8141740: (within prog_name) 

Called from: 
    0.6% : 0x812E077: (within prog_name) 

--------------------------------- 
Context accounted for 0.5% of measured spacetime 
    0x805F29A: (within prog_name) 
    0x81418FB: (within prog_name) 

Called from: 
    0.5% : 0x812E077: (within prog_name) 

Je compilé mon application avec le drapeau -g pour mettre les symboles de débogage dans. Est-il une autre raison pour laquelle valgrind ne serait pas montrer la ligne de source?

ÉDIT: valgrind version 3.2.1-Debian; g ++ 4.3.1

+1

Je ne sais pas, mais si vous 'gdb prog_name' votre application et essayez quelque chose comme' break 0x812E077', est-ce que 'gdb' affiche les numéros de ligne? (Vous ne devriez même pas lancer le programme, mais le charger 'gdb'.) – aschepler

+0

@aschepler - Je l'ai essayé. Chaque fois que j'essaye de faire cela, gdb ne peut pas trouver la fonction nommée "0x812E077" et demande si elle est dans une bibliothèque qu'elle chargera plus tard ... donc cela n'a pas fonctionné. –

+1

Oups, cela aurait dû être 'break * 0x812E077'. Mais content que vous ayez trouvé une solution. – aschepler

Répondre

8

j'ai découvert que je suis passé dans les deux -g et -ggdb drapeaux pour g++ au moment de la compilation. L'omission du drapeau -g a provoqué la disparition de ce problème.

1

Je suppose que vous ne mentionnez pas de drapeaux droits et que vous utilisez des drapeaux par défaut. --show-reachable est l'un de ces indicateurs qui devrait être activé, s'il vous plaît regardez les autres drapeaux et activez-les.

--Cheers

2

Il y a deux raisons possibles:

  • vous pouvez avoir, par inadvertance, dépouillé votre exécutable (explication la plus probable),
  • vous pouvez exécuter le code JITted (bien que l'adresse ne ressemble pas à c'est l'affaire).

Que dit file prog_name? S'il est dit "dépouillé", c'est un problème. Vous pouvez également vérifier si d'autres outils, par ex. GDB savoir ce que le symbole est à l'adresse 0x805F29A:

gdb prog_name 
(gdb) info symbol 0x805F29A 
+0

Je n'ai jamais reçu un message dépouillé. Je ne sais pas avec certitude, mais je soupçonne que le mélange des drapeaux '-g' et '-ggdb' l'a gâché. –

+0

@sheepsimulator Vous pouvez suspecter tout ce que vous voulez, mais si vous voulez que nous vous aidions, s'il vous plaît fournir les informations que nous demandons: que * exactement * fait 'fichier prog_name' dire? que dit exactement le «symbole d'information» de GDB? –

+0

J'apprécie votre démonstration de support, mais ce problème est parti quand j'ai omis le drapeau -g au moment de la compilation. Je considère que ma question a été répondue. –

1

Pour d'autres lecteurs avec le même problème (j'ai eu la même chose, mais mes options de compilateur où ok): Il se trouve que valgrind a besoin du chemin de l'exécutable, si vous Ne le donnez pas alors il fonctionnera bien mais il ne vous donnera pas les numéros de ligne. Dans mon cas, l'exécutable était dans un répertoire différent, qui était dans mon chemin, mais pour obtenir les informations de ligne je devais courir

valgrind --leak-check = full path_to_myprogram/myprogram