2008-11-17 6 views
6

Wenn über einen Zeiger zu befreien Sie einen Fehler sehen können wieiPhone - Debugging „Zeiger befreit wurde nicht zugeordnet“ Fehler

„Zeiger wurde nicht zugewiesen befreit“ Wenn mit dem Simulator Debugging, ich füge ein Build-Argument hinzu MallocStackLogging = YES - das erlaubt mir, malloc_history im Terminal zu verwenden, um herauszufinden, wo ich einen Zeiger freigegeben habe.

Wenn ich debuggen auf dem Gerät mit diesem Build Argumente bekomme ich alle Arten von Konsolenfehlern usw.

Merkwürdig ist, dass ich einige über befreit Zeiger Fehler erscheinen auf dem Gerät „kann nicht Stack-Protokolldateien erstellen“, aber nicht auf dem Simulator.

Hat jemand Erfahrung damit gehabt, diese mit dem Gerät selbst zu verfolgen?

Danke!

Antwort

1

Ich verwende im Allgemeinen NSZombie für solche Dinge, überprüfen this out

0

Sie müssen die MallocStackLogging env Variablen auf die ausführbare Ziel setzen ...

Um diese Einstellungen zuzugreifen, wählen Sie die ausführbare Datei aus den Gruppen & Dateibereich in XCode, dann Informationen abrufen.

Gehen Sie auf die Argumente Registerkarte und fügen Sie die folgenden Einträge in die Box „Variablen in der Umgebung festgelegt werden“:

9

Ein anderer Weg, dies zu tun. Stellen Sie sicher, dass NSZombie aktiviert ist, damit die Speicheradresse des Objekts, das die zusätzliche Version erhält, gemeldet wird. Führen Sie dann mit Performance Tool-> Object Allocations. Dies wird Instrumente hervorbringen. Sehen Sie sich das Konsolenprotokoll an, das von Xcode Organizer zur Verfügung gestellt wird. Sobald Sie den Absturz erhalten, suchen Sie die Speicheradresse in den Instrumenten. Sie werden die gesamte Geschichte von mallocs/frees auf diesem Objekt sehen, sowie Links direkt in Ihren Code.

+2

ich nicht in der Lage war, es mit dieser genauen Wegbeschreibung zu erhalten (in Xcode 4.2.1) - ich hatte Um Xcode zu durchlaufen, fügen Sie die Instrumente an, während sie ausgeführt wurden. Ich hatte "Enable Zombie Objects" für mein aktuelles Scheme aktiviert, und sobald ich die Ausnahme ausgelöst hatte, sperrte sich Instruments wie ein Champion auf und brachte mich in die Geschichte für die Adresse des Zombies. Ich schaute auf den Stack-Trace für die anfängliche Zuweisung und sah eine unnötige '[Autorelease]', die die Ausnahme verursachte. Tolles Werkzeug! – Dov

+0

Das vollständige How to wird auf dem WWDC-Video von 2010 mit dem Titel "Session 311 - Erweiterte Speicheranalyse mit Instrumenten" um 31:50 Uhr gezeigt. – brainray

0

Bitte testen Sie das Programm auf Speicherlecks, überprüfen Sie auch Autoreleases und ob Sie Objekte richtig freigeben oder nicht.Außerdem müssen wir überprüfen, ob ein freigegebenes Objekt einen Speicher zugewiesen hat oder nicht.Sie ​​müssen auch in Bezug auf Autorelease, weil wir versehentlich ein Array oder eine Zeichenfolge oder ein Objekt, das bereits automatisch freigegeben wurde, freigeben können ... hoffe, es hilft und funktioniert!

Tipp: Sie können auf Lecks testen, indem Sie Ihr Projekt zu analysieren (click + Befehl + k verschieben)

Verwandte Themen