Comment obtenez-vous Valgrind pour montrer exactement où une erreur s'est produite? J'ai compilé mon programme (sur une machine Windows via un terminal Linux via Putty) en ajoutant l'option -g de débogage.
Quand je gère Valgrind, je reçois le résumé de la fuite et du tas, et j'ai définitivement perdu la mémoire, mais je n'ai jamais perdu de mémoire, mais je n'ai jamais perdu de mémoire informations sur l'endroit où elle se produit (nom de fichier, ligne). Ne devrait pas valoir que Valgrind me dise sur quelle ligne après que je affecte la mémoire, elle ne parvient pas à traiter plus tard? P>
==15746== ==15746== HEAP SUMMARY: ==15746== in use at exit: 54 bytes in 6 blocks ==15746== total heap usage: 295 allocs, 289 frees, 11,029 bytes allocated ==15746== ==15746== LEAK SUMMARY: ==15746== definitely lost: 12 bytes in 3 blocks ==15746== indirectly lost: 42 bytes in 3 blocks ==15746== possibly lost: 0 bytes in 0 blocks ==15746== still reachable: 0 bytes in 0 blocks ==15746== suppressed: 0 bytes in 0 blocks ==15746== Rerun with --leak-check=full to see details of leaked memory ==15746== ==15746== For counts of detected and suppressed errors, rerun with: -v ==15746== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 15 from 8)
5 Réponses :
Essayez Cela imprime normalement des informations plus utiles.
Ajoutez également le drapeau Valgrind -leak-check = complet code> p>
-O0 code> lors de la compilation de votre code ne pas optimiser. P>
Essayé, rien de nouveau. Peut-être que Valgrind montre des erreurs d'écriture / lecture ... mais ne peut pas montrer où se produisent des fuites de mémoire? Seulement qu'il y a une fuite de mémoire?
Avec le drapeau de vérification des fuites, vous n'obtiendrez pas de numéro de ligne exact. Mais vous trouverez le nom de la fonction où la fuite de mémoire s'est produite. Par exemple: par 0x10000B311: libpiipecreatReTestSuite :: TestMemory () (in ./Test_libPecreator)
D'autres suggestions? Les paramètres du drapeau ne fonctionnent pas pour moi.
Pouvez-vous nous donner la sortie de: Valgrind -leak-check = plein ./YourProgramme
Tune2fs, merci! Je faisais Valgrind ./mypramram - Veak-Check = Full Qui est probablement pourquoi il n'a pas fonctionné.
Je me suis retourné à plusieurs reprises de cela, et je ne pouvais pas comprendre pourquoi '-leak-check = Full' ne fonctionnait pas pour moi, alors je pensais que je me heurterais à Tune2fs commentaire.
Le problème le plus probable est que vous avez (pas shripprcrackers, mais quiconque lisait ce post maintenant) placé -leak-check = Full à la fin de votre ligne de commande. Valgrind voudrait que vous postiriez le drapeau avant de saisir la ligne de commande réelle pour exécuter votre programme. P>
IE: p>
valgrind ./myprogram --leak-check=full
Permettez-moi d'être plus spécifique pour d'autres lecteurs (j'ai eu le même problème, mais mes arguments étaient dans le bon ordre):
J'ai découvert que la valgronnée a besoin de la voie de l'exécutable, si vous ne le donnez pas, il fonctionnera, 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 sur mon chemin, mais pour obtenir les informations de ligne que vous devez exécuter
Ce n'est pas une option liée à la valgronnée. Au lieu de cela, le code doit être compilé avec les options -g code> afin de préserver le symbole de débogage.
cc -g main.c
valgrind --trace-children=yes --track-fds=yes --track-origins=yes --leak-check=full --show-leak-kinds=all ./a.out
Pour que Valgrind affiche les lignes où les erreurs se sont produites dans le fichier,
Je devais ajouter -g -g à l'extrémité par exemple: strong> p> < Strong> alors exécutez simplement Valgrind: strong> p>
Oui, ça devrait. Pouvez-vous coller la sortie Valgrind ici? Exécutez-vous Valgrind en mode Verbose?
Ajouté la sortie. Il dit de réexécuter avec -leak-check = plein, mais je l'ai exécuté avec ce drapeau. Je ne sais pas pourquoi ça ne marche pas. Même avec le mode -v, j'ai toujours la même information.
Dites-vous que cette option de contrôle de fuites n'est pas prise en charge dans Valgrind?
Reportez-vous à cette page: Stackoverflow.com/questions/9321385/... Il donne des informations sur les drapeaux à définir