Outils de détection des fuites de mémoire
L'environnement de développement Xcode D'Apple fournit-il des outils pour la détection des fuites de mémoire?
je suis particulièrement intéressé par les outils qui s'appliquent au SDK iPhone. Actuellement ma plateforme préférée pour les projets de programmation d'hobby
Documentations/tutoriels pour ces outils serait très utile.
11 réponses
il y en a un qui s'appelle spécifiquement Leaks
et comme l'a dit une affiche précédente, la façon la plus facile de l'exécuter est tout droit de Xcode:
exécuter -> Démarrer avec la Performance de l'Outil -> Fuites
il semble très bon à la détection des fuites de mémoire, et a été facile pour une tête Non-C comme moi de comprendre.
sélectionnez Profile
dans le menu Product
de Xcode 6 pour lancer L'outil Instruments D'Apple. (L'application est située dans le contenu du paquet de l'application Xcode: /Applications/Xcode.app/Contents/Applications/
)
une alternative commerciale est OmniObjectMeter . (supprimé par le groupe Omni)
le Clang Static Analyser
est grand pour trouver des bogues en C, C++ et Objectif-C code:
voici le lien pour utiliser l'instrument de xcode pour détecter la fuite de mémoire / les performances de votre application ios / mac marche à suivre pour exécuter l'instrument à partir du Xcode
vous pouvez exécuter les outils dans Xcode plus de menu -> run -> start with performance tool -> ...
L'environnement de développement Xcode D'Apple fournit-il des outils pour la détection des fuites de mémoire?
je suis particulièrement intéressé par les outils qui s'appliquent au SDK iPhone.
Oui. Apple les appelle "Instruments" (il n'y a pas que les outils de mémoire).
voir Apple Introduction to Instruments User Guide
. En particulier, voir Locating Memory Issues in Your App
. Il fournit des exemples de comment utiliser les modèles de trace axés sur la mémoire.
ObjectAlloc et MallocDebug devraient tous deux vous aider. Si vous avez installé L'ensemble du SDK, ils se trouvent dans Developer->Applications->Performance Tools.
leurs noms vous donnent un assez bon indice quant à leurs fonctions, OA, trace les objets créent et MA est un outil général de fuite de mémoire.
Je ne les ai pas encore essayés avec développement iPhone, mais je dois croire qu'ils fonctionneraient là aussi.
En supposant que vous avez enregistré pour le site de développeur iPhone ADC, voici le lien à suivre: Instruments User Guide
lors de l'utilisation de rustyshelf's solution
assurez-vous de tester sur l'iPhone et non sur le simulateur. L'utilisation de la mémoire est radicalement différente.
fait un résumé des principaux outils de fuite de mémoire: iphone-essential-performance-tools-list
essayez celui-ci aussi, un simple tutoriel pour commencer avec Xcode insturments
outil pour les fuites de mémoire: http://www.raywenderlich.com/2696 /
Basic: http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode
Étape 1. Choisir l'instrument D'allocation
- Choisir le modèle de profilage pour les Allocations:
- sur l'interface principale des Instruments, cliquez sur VM Tracker, s'il est présent, et appuyez sur la touche Supprimer car vous ne serez pas ayant besoin de cet instrument particulier:
en cliquant sur le bouton plus en haut à droite, vous pouvez ajouter plus d'instruments pour différents types de tests, mais je ne vais pas les couvrir dans ce tutoriel.
Étape 2. Paramétrez vos Instruments
avant de faire une analyse, il y a quelques choses que vous devez faire faire. Tout d'abord, vous devez brancher un appareil iOS qui a votre application installée dessus. Ce doit être un dispositif physique parce que le simulateur iOS est encore un simulateur et peut ne pas représenter avec précision l'utilisation de la mémoire dans votre application ou comment une application pourrait fonctionner sous la pression de la mémoire.
pour choisir votre cible, cliquez sur mon ordinateur près du haut, passez au-dessus de votre appareil, puis sélectionnez votre application dans le sous-menu:
Ensuite, il y a un panneau où vous pouvez modifier les paramètres pour les types d'allocations vous seront visualisation. En plus de s'assurer que la bulle créée et persistante est vérifiée, il n'y a pas grand chose que vous devez faire à l'avance.
Étape 3. Appuyez sur record pour exécuter l'instrument
Une fois que vous appuyez sur le bouton D'enregistrement dans le coin supérieur gauche, votre application démarre sur votre appareil, et les Instruments commencent à tracer vos allocations. Tout ce que vous devez faire ici est d'exécuter à travers votre application, en se concentrant sur les zones de problèmes possibles pour voir si plus de mémoire allocates que deallocates. Cela pourrait signifier de faire beaucoup de tâches répétitives, mais vous vous remercierez plus tard.
vous devriez voir quelque chose comme ceci:
je recommande de parcourir votre application Une fois et d'atteindre un point stable en mémoire afin que vous ayez une bonne base de référence qui fera toute augmentation perceptible. Lorsque vous êtes convaincu que vous avez assez de données pour tester, appuyez sur le bouton stop en haut à gauche.
Étape 4. Analyser
- la première chose que je fais est de régler ma plage d'inspection pour mesurer le nombre total d'octets persistants à ma ligne de base. Ce numéro d'octet persistant se trouve juste sous le sommaire d'allocation.
pour régler la portée d'inspection, utilisez le raccourci clavier commande < pour la portée d'inspection de gauche et commande > pour la portée d'inspection de droite. Dans notre application, nous avons une base d'environ 20 mo.
- ensuite, je déplace ma portée d'inspection droite jusqu'à un point où j'avais de nouveau traversé l'application et je suis revenu à la racine. Ici, vous pouvez voir la mémoire est la même. Donc, en faisant cela quelques fois de plus et en voyant votre mémoire revenir à notre base de référence, vous pouvez supposer qu'il n'y a pas de problèmes de mémoire majeurs.
Il y a différentes façons d'analyser ces données, que je n'aborde pas ici, mais sachez qu'il y a tout un menu déroulant de façons de voir et d'analyser vos données.
Étape 5. Marquant les générations
si vous préférez ne pas traiter autant les gammes d'inspection, il y a une caractéristique appelée Mark Generation. Il y a un bouton pour cela sur le droit du panneau d'instruments.
ce bouton marquera les points sur la ligne de temps des instruments en fonction de l'endroit où se trouve la ligne d'inspection. Il le fait afin de tenir compte de toutes les allocations depuis la marque précédente, ou dès le début s'il n'y a pas d'autres marques. Vous pouvez marquer des générations pendant que vous utilisez l'instrument d'allocations ou après que vous avez arrêté la course, comme dans ce exemple:
Étape 6. Vérifier la trace de la pile
La dernière chose à couvrir est de regarder la trace de la pile. Pour cela, vous voulez configurer votre intervalle d'inspection pour mettre en évidence toutes les allocations, puis regarder la vue statistique, en s'assurant que la bulle créée et persistante est sélectionnée sur le panneau de droite. Dans le vue des statistiques, assurez-vous que les octets persistants sont triés du plus haut au plus bas. Il y a beaucoup d'allocations ici, et il peut être difficile de comprendre ce qui se passe, puisque beaucoup d'entre eux sont des système d'allocations.
d'Aller en profondeur
- regardez les allocations les plus importantes et cliquez sur la flèche orientée vers la droite. Un grand nombre de fois, il y aura les allocations à l'intérieur de ceux sur lesquels vous avez cliqué et beaucoup d'entre eux n'auront pas de sens pour vous.
- comme vous mettez en évidence les différentes allocations après avoir cliqué sur une flèche, continuez à regarder le détail étendu sur le panneau de droite. Finalement, vous tomberez sur un texte en gras qui mène au code réel dans votre projet, vous disant ce que le problème pourrait être.
- si vous double-cliquez sur un des éléments en gras dans la trace de pile, il vous mènera au code réel (en supposant que vous avez exécuté des allocations sur une application que vous possédez).
-
Il ya beaucoup de choses utiles à propos de cette vue, l'un étant la plupart du temps les étiquettes jaunes sur la droite vous montrant juste combien de mémoire chaque appel de méthode prend. Chaque application est différente donc vous, le développeur, devez décider si la méthode surlignée est un problème, quelque chose que vous pouvez optimiser, ou juste une partie inévitable de votre application.
-
dans mon cas, cette variable UIColor est quelque chose qui est persistante et utilisée tout au long de notre application et est donc acceptable tout au long de la vie de notre application.