Wie man "einen Haltepunkt in malloc_error_break zum Debuggen setzt"


126

Ich erhalte viele Konsolenausgaben wie diese, ohne dass meine Anwendung abstürzt:

malloc: * Fehler für Objekt 0xc6a3970: Der freigegebene Zeiger wurde nicht zugewiesen. * Setzen Sie einen Haltepunkt in malloc_error_break zum Debuggen

Wie kann ich herausfinden, welches Objekt oder welche Variable betroffen ist?

Ich habe versucht, einen symbolischen Haltepunkt wie diesen festzulegen, aber er wird nie angehalten:

Geben Sie hier die Bildbeschreibung ein


1
Ich löse dieses Problem, indem ich die Safari-Inspektion deaktiviere. stackoverflow.com/a/43885754/6521116
Kris Roofe

Eine der Ursachen hierfür ist eine Funktion / Methode, die ein Objekt zurückgeben soll und das Ende der Funktion erreicht und nichts zurückgibt.
Xofo

Antworten:


136

Setzen Sie einen Haltepunkt auf malloc_error_break (), indem Sie den Haltepunktnavigator (Ansicht-> Navigatoren-> Haltepunktnavigator anzeigen oder ⌘7) öffnen, auf das Pluszeichen in der unteren linken Ecke klicken und "Symbolischen Haltepunkt hinzufügen" auswählen. Geben Sie im daraufhin angezeigten Popup malloc_error_breakin das Feld Symbol ein und klicken Sie auf Fertig.

BEARBEITEN: openfrog hat einen Screenshot hinzugefügt und darauf hingewiesen, dass er diese Schritte bereits erfolglos ausprobiert hat, nachdem ich meine Antwort gepostet habe. Bei dieser Bearbeitung bin ich mir nicht sicher, was ich sagen soll. Ich habe nicht gesehen, dass das selbst nicht funktioniert, und tatsächlich behalte ich immer einen Haltepunkt für malloc_error_break gesetzt.


2
Das hat bei mir funktioniert (ohne das Modul). Die Ursache für das Problem war für mich, dass ich UIImageeine Datei hatte und die Datei mit einem anderen Bild überschrieb. Dies verursachte einen Fehler, als ich UIImagePNGRepresentationdas Originalbild aufrief (nicht, als die Datei tatsächlich überschrieben wurde).
Robert

Ich bekomme keinen Plus-Button in der unteren linken Ecke der ⌘7Leiste ... Vielleicht meintest du das ⌘8?
ScottyBlades

@ScottyBlades vermutet, dass sich die Verknüpfung geändert hat. Ich habe diese Antwort vor 8 Jahren und 7 großen Xcode-Versionen geschrieben ...
Andrew Madsen

@ AndrewMadsen Keine Sorge, nur prüfen, ob das Bearbeiten sinnvoll ist.
ScottyBlades

46

In Ihrem Screenshot haben Sie kein Modul angegeben: Versuchen Sie, "libsystem_c.dylib" einzustellen.

Geben Sie hier die Bildbeschreibung ein

Ich habe das getan und es funktioniert: Der Haltepunkt stoppt hier (obwohl der Stacktrace oft aus einer obskuren Systemlib entsteht ...)


7
Es sieht so aus, als ob der Modulname in iOS anders ist libsystem_malloc.dylib. Breakpoint funktioniert bei mir ohne Angabe eines Moduls.
Nestor

6

Ich hatte das gleiche Problem mit Xcode. Ich habe die Schritte befolgt, die Sie gegeben haben, und es hat nicht funktioniert. Ich wurde verrückt, weil in jedem Forum, das ich sah, alle Hinweise für dieses Problem die sind, die Sie gegeben haben. Ich habe endlich gesehen, dass ich nach dem malloc_error_break ein Leerzeichen gesetzt habe, ich habe es unterdrückt und jetzt funktioniert es. Ein dummes Problem, aber wenn die Lösung nicht funktioniert, stellen Sie sicher, dass Sie vor und nach dem malloc_error_break kein Leerzeichen eingefügt haben.

Hoffe, diese Nachricht wird helfen ..


4

Ich hatte Berechtigungen erteilt, die ich nicht in einige Ordner schreiben musste (insbesondere / usr / bin /), und das verursachte das Problem. Ich habe es behoben, indem ich das Festplatten-Dienstprogramm geöffnet und "Festplattenberechtigungen reparieren" auf der Macintosh HD-Festplatte ausgeführt habe.


Danke, das hat meine kaputte Maschine repariert.
Matt Fletcher

2

Ich löse es durch einen engen Safari-Inspektor. Siehe meinen Beitrag . Manchmal habe ich auch Sound gefunden, wenn ich meine App zum Testen ausführe und dann die Safari mit aktiviertem Auto Inspector öffne. Danach mache ich eine Aktion in meiner App, dann wird dieses Problem ausgelöst.

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.