web-dev-qa-db-fra.com

Outils de détection de fuite 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 de loisirs

Des documentations/tutoriels pour ces outils seraient très utiles.

64
SytS

Il y en a un spécifiquement appelé Leaks et comme l'a dit une affiche précédente, la façon la plus simple de l'exécuter est directement depuis Xcode:

exécuter -> Démarrer avec Performance Tool -> Leaks

Il semble très bon pour détecter les fuites de mémoire et était facile à comprendre pour un chef non-C comme moi.

65
rustyshelf

Sélectionnez Profile dans le menu Product de Xcode 6 pour lancer l'outil Instruments d'Apple. (L'application se trouve dans le contenu du package de l'application Xcode: /Applications/Xcode.app/Contents/Applications/)

Une alternative commerciale est OmniObjectMeter . (Discontinué par The Omni Group)

25
titaniumdecoy

Le Clang Static Analyser est idéal pour trouver des bogues dans le code C, C++ et Objective-C:

12
lajos

Voici le lien pour utiliser l'instrument de xcode pour détecter la fuite de mémoire/les performances de votre application ios/mac Étapes pour exécuter l'instrument à partir de Xcode

6
silentBeep

Vous pouvez exécuter les outils dans Xcode sur menu -> run -> start with performance tool -> ...

6
catlan

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 y a plus que des outils de mémoire).

Voir Apple Introduction to Instruments User Guide . En particulier, voir Locating Memory Issues in Your App . Il fournit des exemples d'utilisation des modèles de trace orientés mémoire.

5
jww

ObjectAlloc et MallocDebug devraient tous deux vous être utiles. Si vous avez installé l'intégralité du SDK, ils se trouvent dans Developer-> Applications-> Performance Tools.

Leurs noms vous donnent un assez bon indice quant à leurs fonctions, OA, suit les objets créés et MA est un outil général de fuite de mémoire.

Je ne les ai pas encore essayés avec le développement iPhone, mais je dois croire qu'ils fonctionneraient également là-bas.

En supposant que vous vous êtes inscrit sur le site des développeurs ADC iPhone, voici le lien à suivre: Instruments User Guide

4
KevDog

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
schwa

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

4
Benoit Caccinolo

Essayez aussi celui-ci, un tutoriel simple pour commencer avec les insturments Xcode

Outil de fuite de mémoire: http://www.raywenderlich.com/2696/

De base: http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode

3

enter image description here

Étape 1. Choisissez l'instrument d'allocation

  1. Choisissez 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 Suppr car vous n'aurez pas 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 les couvrirai pas dans ce tutoriel.

Étape 2. Configurez les paramètres de vos instruments

Avant d'exécuter une analyse, vous devez effectuer certaines opérations. Tout d'abord, vous devez connecter un appareil iOS sur lequel votre application est installée. Il doit s'agir d'un appareil physique car le simulateur iOS est toujours un simulateur et peut ne pas représenter avec précision l'utilisation de la mémoire dans votre application ou la façon dont une application peut fonctionner sous la pression de la mémoire.

Pour choisir votre cible, cliquez sur Poste de travail vers le haut, survolez votre appareil, puis choisissez 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 que vous afficherez. En plus de vous assurer que la bulle créée et persistante est cochée, il n'y a pas grand-chose à faire au préalable.

enter image description here

Étape 3. Appuyez sur record pour exécuter l'instrument

Une fois que vous avez appuyé sur le bouton Enregistrer en haut à gauche, votre application démarre sur votre appareil et les instruments commencent à représenter vos allocations. Tout ce que vous devez faire ici est de parcourir votre application, en se concentrant sur les zones de problème possibles pour voir si plus de mémoire est allouée que désallouée. Cela pourrait signifier faire beaucoup de tâches répétitives, mais vous vous en remercierez plus tard.

Vous devriez voir quelque chose comme ceci:

enter image description here

Je vous recommande de parcourir votre application une fois et d'atteindre un point stable dans la mémoire afin d'avoir une bonne base de référence qui rendra toute augmentation notable. Lorsque vous êtes satisfait de disposer de suffisamment de données à tester, appuyez sur le bouton d'arrêt en haut à gauche.

Étape 4. Analyser

  1. La première chose que je fais est de définir ma plage d'inspection pour mesurer le nombre total d'octets persistants sur ma ligne de base. Ce numéro d'octet persistant se trouve juste sous le résumé d'allocation.

enter image description here

Pour définir réellement la plage d'inspection, utilisez le raccourci clavier Commande < pour la plage d'inspection gauche et Commande> pour la bonne plage d'inspection. Dans notre application, nous avons une base de référence d'environ 20 Mo.

enter image description here

  1. Ensuite, je déplace ma plage d'inspection droite à un point où j'avais à nouveau parcouru l'application et suis revenu à notre racine. Ici, vous pouvez voir que la mémoire est à peu près la même. Donc, en faisant cela quelques fois de plus et en voyant votre mémoire revenir à notre ligne de base, vous pouvez supposer qu'il n'y a pas de problème de mémoire majeur.

enter image description here

Il existe différentes façons d'analyser ces données que je ne couvrirai pas ici, mais sachez qu'il existe un menu déroulant complet de façons d'afficher et d'analyser vos données.

enter image description here

Étape 5. Marquage des générations

Si vous préférez ne pas traiter autant les plages d'inspection, il existe une fonctionnalité appelée Mark Generation. Il y a un bouton pour cela sur le panneau droit des instruments.

enter image description here

Ce bouton marquera des points sur la chronologie des instruments en fonction de l'emplacement de la ligne d'inspection. Il le fait afin de garder une trace de toutes les allocations depuis la marque précédente, ou depuis le début s'il n'y a pas d'autres marques. Vous pouvez marquer des générations lorsque vous exécutez l'instrument d'allocation ou après avoir arrêté l'exécution, comme dans cet exemple:

enter image description here

Étape 6. Vérifiez la trace de la pile

La dernière chose à couvrir est de regarder la trace de la pile. Pour cela, vous souhaitez définir votre plage d'inspection pour mettre en évidence toutes les allocations, puis consulter la vue des statistiques, en vous assurant que la bulle créée et persistante est sélectionné dans le panneau de droite. Dans la vue des statistiques, assurez-vous que les octets persistants sont triés du plus élevé au plus bas. Il y a beaucoup d'allocations ici, et il peut être difficile de comprendre ce qui se passe, car beaucoup d'entre elles sont des allocations système.

enter image description here

Approfondissement

  1. Regardez les allocations les plus importantes et cliquez sur la flèche vers la droite. Souvent, il y aura des allocations à l'intérieur de celles sur lesquelles vous avez cliqué et beaucoup d'entre elles n'auront pas de sens pour vous.

enter image description here

  1. Lorsque vous mettez en surbrillance différentes allocations après avoir cliqué sur une flèche, continuez à regarder les détails étendus sur le panneau de droite. Finalement, vous rencontrerez un texte en gras qui conduit à du code réel dans votre projet, vous indiquant quel pourrait être le problème.

enter image description here

  1. Si vous double-cliquez sur l'un des éléments en gras dans la trace de la pile, cela vous amè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 y a beaucoup de choses utiles à propos de cette vue, l'une étant les balises principalement jaunes à droite vous indiquant la quantité de mémoire que chaque appel de méthode occupe. Chaque application est différente, donc vous, le développeur, devez décider si la méthode en surbrillance est un problème, quelque chose que vous pouvez optimiser ou simplement une partie inévitable de votre application.

  2. Dans mon cas, cette variable UIColor est quelque chose de persistant et utilisé dans toute notre application et est donc acceptable tout au long de la vie de notre application.

trouvé ici

3
David Seek