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.

61
demandé sur silentBeep 2008-09-27 23:17:08

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.

63
répondu rustyshelf 2015-12-19 13:47:49

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)

25
répondu titaniumdecoy 2015-12-19 13:48:45

le Clang Static Analyser est grand pour trouver des bogues en C, C++ et Objectif-C code:

12
répondu lajos 2015-12-19 13:49:37

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

6
répondu silentBeep 2013-08-29 06:47:47

vous pouvez exécuter les outils dans Xcode plus de menu -> run -> start with performance tool -> ...

6
répondu catlan 2015-12-19 13:49:04

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.

5
répondu jww 2015-12-19 13:51:31

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

4
répondu KevDog 2015-12-19 13:48:09

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.

4
répondu schwa 2017-05-23 12:24:53

fait un résumé des principaux outils de fuite de mémoire: iphone-essential-performance-tools-list

4
répondu Benoit Caccinolo 2015-12-19 13:50:22

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

3
répondu Sagar S. Kadookkunnan 2015-12-19 13:51:55

enter image description here

Étape 1. Choisir l'instrument D'allocation

  1. Choisir le modèle de profilage pour les Allocations:

enter image description here

  1. 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:

enter image description here

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:

enter image description here

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.

enter image description here

É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:

enter image description here

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

  1. 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.

enter image description here

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.

enter image description here

  1. 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.

enter image description here

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.

enter image description here

É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.

enter image description here

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:

enter image description here

É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.

enter image description here

d'Aller en profondeur

  1. 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.

enter image description here

  1. 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.

enter image description here

  1. 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).

enter image description here

  1. 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.

  2. 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.

trouvé ici

3
répondu David Seek 2016-04-24 08:09:42