Frage

Ist Apples Xcode-Entwicklungsumgebung bietet keine Werkzeuge für Erkennung von Speicherlecks?

Ich interessiere mich besonders für Werkzeuge, die auf das iPhone SDK anwenden. Derzeit ist mein Lieblings Plattform für Hobby-Programmierprojekte

Dokumentationen / Tutorials für die Werkzeuge wären sehr hilfreich sein.

War es hilfreich?

Lösung

Es gibt eine speziell genannt Leaks und wie ein vorher bereits erwähnt, ist der einfachste Weg, es zu laufen ist gerade von Xcode:

  
    

Ausführen -> Start mit Performance Tool -> Leaks

  

Es scheint sehr gut zu Speicherlecks zu erfassen, und war leicht für einen Nicht-C-Kopf wie mich herauszufinden.

Andere Tipps

Wählen Sie Profile aus dem Product Menü in Xcode 6 starten Apples Instruments Werkzeug. (Der Antrag ist innerhalb der Xcode Anwendung Paketinhalt zu finden: /Applications/Xcode.app/Contents/Applications/)

Eine kommerzielle Alternative ist OmniObjectMeter . (Nicht mehr durch die Omni Group)

Das Clang Static Analyser ist für Fehler in C, C ++ und Objective-C-Code zu finden:

Hier ist der Link zum Instrument von Xcode Speicherleck / Leistung Sie ios / Mac-Anwendung zu erfassen, Schritte ausführen Instrument von Xcode

Sie können die Werkzeuge in Xcode über menu -> run -> start with performance tool -> ... laufen

  

Ist Apples Xcode-Entwicklungsumgebung bietet keine Werkzeuge für Erkennung von Speicherlecks?

     

Ich interessiere mich besonders für Werkzeuge, die auf das iPhone SDK gelten.

Ja. Apple nennt sich "Instrumente" (es gibt mehr als nur Memory-Tools).

Siehe Apple Introduction to Instruments User Guide . Insbesondere finden Sie unter Locating Memory Issues in Your App . Es gibt Beispiele dafür, wie die Speicherorientierten Spur Vorlagen.

ObjectAlloc und MallocDebug beide sollten Sie behilflich sein. Wenn Sie das gesamte SDK installiert ist, wird sie in Entwickler- finden> Anwendungen-> Performance Tools.

Ihre Namen geben Sie eine ziemlich gute Ahnung, ihre Funktionen, OA, verfolgt die Objekte erstellen und MA ist eine allgemeine Speicherverlust Werkzeug.

Ich habe sie nicht mit iPhone Entwicklung noch nicht ausprobiert, aber ich habe zu glauben, dass sie so gut es funktionieren würden.

Angenommen, Sie für ADC iPhone Entwickler-Website registriert haben, hier der Link zu folgen: Instruments User Guide

Bei der Verwendung von rustyshelf's solution stellen Sie sicher auf dem iPhone testen und nicht auf dem Simulator. Der Speicherverbrauch ist dramatisch anders aus.

Aus einer Summe aus dem Hauptspeicherverlust Tool: iphone-essential-performance-tools-list

Versuchen Sie dies auch ein einfaches Tutorial mit Xcode insturments zu starten

Speicherleck-Tool: http://www.raywenderlich.com/2696/

Basic: http://www.raywenderlich.com/ 23037 / how-to-use-Instrumenten-in-Xcode

Schritt 1. Wählen Sie die Zuteilungen Instrument

  1. Wählen Sie die Profilvorlage für Verrechnungen:

  1. Auf dem Hauptinstrument Schnittstelle, klicken Sie auf VM Tracker, falls vorhanden, und die Entf-Taste drücken, da Sie nicht, dass bestimmtes Instrument mehr brauchen:

die Plus-Schaltfläche in der oberen rechten Mit einem Klick können Sie Instrumente für verschiedene Arten von Tests hinzufügen, aber ich werde sie nicht in diesem Tutorial werden abdeckt.

Schritt 2. Richten Sie Ihre Instrumente Einstellungen

Vor der Analyse ausgeführt wird, gibt es ein paar Dinge, die Sie tun müssen. Zuerst müssen Sie in einem iOS-Gerät anschließen, das Ihre Anwendung darauf installiert hat. Es muss ein physikalisches Gerät sein, weil der iOS Simulator noch ein Simulator und nicht genau die Speichernutzung in Ihrer App oder wie eine App unter Speicherdruck.

darstellen könnte ausführen

Ihr Ziel zu wählen, klicken Sie auf Arbeitsplatz in der Nähe der Spitze, schweben über dem Gerät, und dann aus dem Untermenü wählen Sie Ihre App:

Als nächstes gibt es ein Panel, in dem Sie die Einstellungen für die Arten von Zuweisungen ändern können, werden Sie sehen. Abgesehen davon, dass Sie sicher, dass die Erstellt & Persistent Blase aktiviert ist, gibt es nicht viel Sie vorher tun müssen.

Schritt 3. Drücken Sie Aufzeichnung des Instruments

laufen

Wenn Sie die Record-Taste in der oberen linken drücken, wird die App auf Ihrem Gerät starten und Instrumente beginnen Ihre Zuweisungen zu entwerfen. zu sehen, ob mehr Speicher reserviert als Speicherfreigabe Alles, was Sie hier tun müssen, ist durch Ihre Anwendung ausführen, auf mögliche Problembereiche konzentrieren. Dies könnte viele sich wiederholende Aufgaben bedeuten tun, aber Sie werden sich später danken.

Sie sollten etwas wie diese:

Ich empfehle, laufe durch Ihre Anwendung einmal und zu einem stabilen Punkt im Speicher erhalten, so dass Sie eine gute Basis haben, dass jeder Anstieg bemerkbar machen wird. Wenn Sie zufrieden sind Sie genug Daten zu testen, drücken Sie die Taste Stopp in der oberen linken.

Schritt 4. Analysieren

  1. Das erste, was ich tue, ist mein Inspektionsbereich eingestellt, die Gesamt persistent Bytes an meiner Basislinie zu messen. Die anhaltende Byte-Zahl wird direkt unter der Zuteilung Zusammenfassung befindet.

Um den Inspektionsbereich tatsächlich festzulegen, verwenden Sie die Tastenkombination Befehl < für den linken Inspektionsbereich und Befehl> für den rechten Inspektionsbereich. In unserer App haben wir eine Basis von etwa 20 MB.

  1. Dann habe ich meinen rechten Inspektionsbereich zu einem Punkt, wo ich über die App laufen hattewieder und kam zu unserer Wurzel zurück. Hier können Sie sehen, Speicher etwa gleich ist. Also, durch das ein paar Mal zu tun und zu sehen, Ihr Gedächtnis zu unserem Basiszurückkommen, können Sie davon ausgehen, gibt es keine großen Speicherprobleme.

Es gibt verschiedene Möglichkeiten, diese Daten zu analysieren, die ich hier nicht abdecken, aber darüber im Klaren sein, dass es ein ganzes Dropdown-Menü von Möglichkeiten, um Ihre Daten zu betrachten und zu analysieren.

Schritt 5. Kennzeichnung Generationen

Wenn Sie nicht mit der Inspektion beschäftigen reicht so weit, gibt es eine Funktion Mark-Generation genannt. Es gibt einen Knopf für sie auf der rechten Seite von Instrumenten.

Mit dieser Taste wird die Punkte auf der Timeline von Instrumenten markiert auf, wo die Inspektionslinie ist. Es tut dies, um seit der letzten Markierung den Überblick über alle Zuführungen zu halten, oder von Anfang an, wenn es keine anderen Marken sind. Sie können Generationen markieren, wie Sie die Zuweisungen Instrument ausgeführt werden oder nach dem Lauf aufgehört haben, wie in diesem Beispiel:

Schritt 6. Schauen Sie sich die Stack-Trace

Das letzte, was zu Abdeckung ist an dem Stack-Trace suchen. Dazu möchten Sie Ihre Inspektionsbereich einzustellen alle Zuordnungen zu markieren, und dann auf die Statistik-Ansicht zu betrachten, machen, dass die Erstellt & Persistent Blase auf der rechten Seite ausgewählt ist. In der Statistik-Ansicht, stellen Sie sicher, Persistent Bytes vom höchsten zum niedrigsten sortiert ist. Es gibt eine Menge von Zuweisungen hier, und es kann schwierig sein, zu verstehen, was los ist, da viele von ihnen System Zuweisungen sind.

Going tief

  1. Schauen Sie sich die größten Zuweisungen und klicken Sie auf den Pfeil nach rechts. Eine Menge Zeit wird es Zuweisungen innerhalb diejenigen sein, klickten Sie auf und viele von ihnen werden nicht an Sie haben eine Bedeutung.

  1. Wenn Sie verschiedene Zuordnungen markieren nach einem Pfeil klicken, weiterhin im erweiterten Detail auf der rechten Seite suchen. Schließlich werden Sie über einige fett gedruckten Text kommen, die in einem Projekt eigentlichen Code führt, sagen Sie, was das Problem sein könnte.

  1. Wenn Sie einen Doppelklick auf eines der fetten Elemente in dem Stack-Trace, es wird SieFormal zu dem eigentlichen Code nehmen (vorausgesetzt, Sie Zuweisungen auf einer App laufen Sie besitzen).

  1. eine Menge nützlicher Dinge über diese Ansicht gibt es eine, die meist gelb-Tags auf der rechten Seite sind Sie nur zeigen, wie viel Speicher jeder Methode Aufruf nimmt. Jede App ist anders, so dass Sie, der Entwickler, zu entscheiden, ob die markierte Methode ein Problem ist, etwas, das Sie optimieren, oder einfach nur eine unavoidable Teil Ihrer App.

  2. In meinem Fall, dass UIColor Variable ist etwas, das in unserer App persistent und verwendet wird, und ist daher akzeptabel während der gesamten Lebensdauer unserer App.

hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top