Comment faire pour Tester les Fuites de Mémoire?
Nous avons une application avec des centaines de possibles actions de l'utilisateur, et de réfléchir à comment améliorer la mémoire, des tests de fuite.
Actuellement, voici la façon dont il se produit: Quand manuellement l'essai du logiciel, s'il apparaît que notre application consomme trop de mémoire, nous utilisons un outil de mémoire, trouver la cause et la corriger. C'est un peu lent et n'est pas efficace: les problèmes sont découverts tardivement, et s'appuie sur la bonne volonté d'un développeur.
Comment pouvons-nous améliorer?
- Interne de vérifier que certaines actions (comme "fermer le fichier") ne récupérer un peu de mémoire et journal?
- Valoir sur l'état de la mémoire à l'intérieur de nos tests unitaires (mais il semble que ce serait une tâche longue et fastidieuse) ?
- Manuellement régulièrement vérifier de temps en temps?
- Comprennent que la case à chaque fois qu'un nouvel article de l'utilisateur est mis en œuvre?
Quelle langue utilisez-vous? Est-il un garbage collector de langage comme Java ou Perl ou un non-GC langages comme le C ou le C++?
Et quelle plate-forme? Il y a les outils d'analyse statique, de la mémoire d'outils de profilage et d'autres techniques disponibles, mais sans rien préciser sur votre mise en œuvre, il est difficile de vous donner un utilisable réponse.
Et quelle plate-forme? Il y a les outils d'analyse statique, de la mémoire d'outils de profilage et d'autres techniques disponibles, mais sans rien préciser sur votre mise en œuvre, il est difficile de vous donner un utilisable réponse.
OriginalL'auteur sthiers | 2009-01-07
Vous devez vous connecter pour publier un commentaire.
Quelle langue?
J'avais utiliser un outil tel que Valgrind, essayez d'exercer pleinement le programme et voir ce qu'il indique.
OriginalL'auteur Draemon
première ligne de défense:
répartition des erreurs pour
les développeurs
deuxième ligne de défense:
Si vous travaillez avec des non géré la langue (comme le C/C++) vous permettent de découvrir la plupart des fuites de mémoire par le détournement de fonctions de gestion de mémoire. Par exemple, vous pouvez suivre toutes les allocations de mémoire/deallocations.
OriginalL'auteur aku
Il me semble que le cœur du problème n'est pas tant de trouver des fuites de mémoire que de savoir quand les tester. Vous dites que vous avez beaucoup d'actions de l'utilisateur, mais vous ne dites pas ce que séquences des actions de l'utilisateur sont significatives. Si vous pouvez générer des séquences au hasard, je dirais dur pour les tests aléatoires. Sur des tests au hasard vous permettrait de mesurer
gcov
ouvalgrind
)valgrind
)Par "la couverture des actions de l'utilisateur", je veux dire des déclarations comme suit:
Si ce n'est pas vrai, alors vous pouvez vous demander quelle est la fraction de paires A et B, il est vrai.
Si vous avez des cycles de PROCESSEUR pour se le permettre, vous serait probablement aussi bénéficier de l'exécution de
valgrind
ou d'une autre, la vérification de la mémoire de l'outil avant chaque livraison de votre code source référentiel ou lors d'une nightly build.Automatiser!
OriginalL'auteur Norman Ramsey
Dans mon entreprise, nous avons programmé une action interminable chemin pour notre application. Le garbage collector java doit nettoyer tous les cartes et la liste et quelque chose comme ça. Donc nous laissons le démarrage de l'application avec l'action interminable chemin et regarder, si l'utilisation de la mémoire de la taille est croissante.
La vérification des champs qui ne sont pas supprimés, vous pouvez utiliser JProfiler pour Java.
OriginalL'auteur Markus Lausberg
Remplacer nouveau et supprimer avec votre version personnalisée et connectez-vous chaque acte de l'allocation/désallocation.
En parlant de façon générale (pas sur les tests, plutôt à lutter contre le problème de son origine), smartpointers aider à éviter ce problème. Heureusement, le C++11 standard fournit de nouvelles pratiques de pointeur intelligent classes (
shared_ptr
,unique_ptr
).OriginalL'auteur borx