Come "impostare un punto di interruzione in malloc_error_break per il debug"


126

Ricevo molti output della console come questo senza che la mia applicazione si arrestasse in modo anomalo:

malloc: * errore per l'oggetto 0xc6a3970: il puntatore da liberare non è stato allocato * impostare un punto di interruzione in malloc_error_break per il debug

Come posso scoprire quale oggetto o variabile è interessata?

Ho provato a impostare un breakpoint simbolico come questo ma non si ferma mai:

inserisci qui la descrizione dell'immagine


1
Risolvo questo problema disabilitando Safari Inspect. stackoverflow.com/a/43885754/6521116
Kris Roofe

Una delle cause di ciò è una funzione / metodo che dovrebbe restituire un oggetto e raggiunge la fine della funzione e non restituisce nulla.
Xofo,

Risposte:


136

Imposta un breakpoint su malloc_error_break () aprendo Breakpoint Navigator (Visualizza-> Navigators-> Show Breakpoint Navigator o ⌘7), facendo clic sul pulsante più nell'angolo in basso a sinistra e selezionando "Aggiungi breakpoint simbolico". Nel popup che viene visualizzato, inserisci malloc_error_breaknel campo Simbolo, quindi fai clic su Fine.

EDIT: openfrog ha aggiunto uno screenshot e ha indicato che ha già provato questi passaggi senza successo dopo che ho pubblicato la mia risposta. Con quella modifica, non sono sicuro di cosa dire. Non ho visto che non riesco a funzionare da solo, e in effetti mantengo sempre un punto di interruzione sul set malloc_error_break.


2
Questo ha funzionato per me (senza il modulo). La causa del problema per me era che avevo un UIImagebackup di un file e stavo sovrascrivendo il file con un'immagine diversa. Ciò ha causato un errore quando ho chiamato UIImagePNGRepresentationl'immagine originale (non quando il file è stato effettivamente sovrascritto).
Robert,

Non visualizzo il pulsante più nell'angolo in basso a sinistra della ⌘7barra ... Forse intendevi ⌘8?
ScottyBlades,

@ScottyBlades indovinando che il collegamento è cambiato. Ho scritto questa risposta 8 anni e 7 versioni principali di Xcode fa ...
Andrew Madsen,

@AndrewMadsen Nessun problema, sto solo verificando se ha senso modificarlo.
ScottyBlades,

46

Nel tuo screenshot non hai specificato alcun modulo: prova a impostare "libsystem_c.dylib"

inserisci qui la descrizione dell'immagine

L'ho fatto e funziona: il punto di interruzione si ferma qui (anche se lo stacktrace spesso sorge da qualche oscura libreria di sistema ...)


7
Sembra che il nome del modulo è diverso in iOS, è: libsystem_malloc.dylib. Breakpoint funziona per me senza specificare un modulo.
Nestor,

6

Ho avuto lo stesso problema con Xcode. Ho seguito i passaggi che hai dato e non ha funzionato. Sono diventato pazzo perché in ogni forum che ho visto, tutti gli indizi per questo problema sono quelli che hai dato. Alla fine ho visto che ho inserito uno spazio dopo il malloc_error_break, l'ho soppresso e ora funziona. Un problema stupido ma se la soluzione non funziona, assicurati di non aver lasciato spazio prima e dopo il malloc_error_break.

Spero che questo messaggio ti aiuti ..


4

Avevo dato i permessi che non avrei dovuto scrivere in alcune cartelle (specialmente / usr / bin /), e questo ha causato il problema. L'ho risolto aprendo Utility Disco ed eseguendo 'Ripara permessi disco' sul disco HD Macintosh.


Grazie, questo ha riparato la mia macchina borked.
Matt Fletcher,

2

Lo risolvo da vicino ispettore safari. Fare riferimento al mio post . Ho anche trovato l'audio a volte quando eseguo la mia app per il test, quindi apro Safari con Auto Inspector attivo, dopo questo, faccio qualche azione nella mia app e questo problema si è attivato.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.