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.
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.
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)
Le Clang Static Analyser
est idéal pour trouver des bogues dans le code C, C++ et Objective-C:
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
Vous pouvez exécuter les outils dans Xcode sur 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 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.
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
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 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
Étape 1. Choisissez l'instrument d'allocation
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:
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.
É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:
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
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.
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.
É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.
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:
É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.
Approfondissement
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.
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.