Quelle stratégie utilisez-vous lors du suivi d'un problème lié à la mémoire? Quels outils utilisez-vous (open source et propriétaire) pour identifier les fuites de mémoire, la corruption de mémoire, etc.? Comment suivriez-vous les fuites de mémoire si seulement gdb / dbx était disponible sur un système?
Pour moi, réparer les fuites de mémoire avec seulement un débogueur est très difficile.
debugging
memory-leaks
Hemant
la source
la source
Réponses:
Si vous pouvez changer le code source, Dmalloc est génial; il listera les pointeurs qui n'ont pas été libérés et (pour le code construit avec des symboles de débogage) exactement sur quelle ligne ils ont été alloués.
Si vous ne pouvez pas, Valgrind est à peu près la norme pour ce genre de chose. Je trouve généralement Valgrind un peu plus difficile à utiliser, mais il a beaucoup plus de fonctionnalités et n'implique pas l'ajout d'appels dmalloc dans votre code
la source
valgrind est incroyablement utile.
la source
Le massif (de valgrind) est l'un des meilleurs moyens de détecter les fuites de mémoire. Répétez votre code suspect (ou exécutez votre programme assez longtemps) et videz le résultat avec ms_print. Habituellement, la pile d'appels vous donne suffisamment d'informations pour y remédier.
Avec GDB, vous pouvez essayer de vous attacher à un programme en cours d'exécution et d'appeler des fonctions telles que
malloc_stats()
Si votre programme est écrit dans une langue différente, cela pourrait être plus délicat. Récemment, certains GDB ont gagné en scriptabilité, et les gens ont commencé des projets intéressants tels que gdb-heap , qui peut analyser la mémoire Python à partir d'un vidage de mémoire. Des scripts d'analyse de mémoire similaires peuvent être possibles pour les objets C ++.
Lisez aussi /programming/2564752/examining-cc-heap-memory-statistics-in-gdb
la source
Pour Solaris, plusieurs outils sont répertoriés dans les réponses à cette question StackOverflow (ils incluent la vérification des fuites avec d'autres formes d'accès incorrect à la mémoire).
la source
Je fais de l'Objective-C depuis un certain temps, et il y a un analyseur qui gère la gestion de la mémoire de niveau C et des trucs comme ça. Clang Static Analyzer est si bon qu'Apple a décidé de le regrouper avec leur IDE xCode. Je ne sais pas si cela convient à votre question, mais si vous faites du C, cela vaut la peine d'essayer.
la source