2012-03-16 12 views
29

Sto tentando di risolvere un errore "messaggio inviato all'istanza deallocata" in iOS.LLDB equivalente al comando "info malloc-history <address>" di GDB?

+0

Usa gli strumenti, ti dà quell'informazione. –

+2

@Richard, Usare lo strumento Zombie ti aiuterà a eseguire il debug, ma a volte è bello conoscere la cronologia del malloc mentre si è seduti in gdb. –

+0

Sarebbe bene se gli strumenti non bloccassero la macchina –

risposta

0

In passato era possibile utilizzare lo strumento da riga di comando malloc_history da una shell e fornire l'ID di processo e l'indirizzo di interesse. Sembra che questo comando non sia più installato dagli ultimi strumenti della riga di comando di Xcode. :-(

+0

malloc_history sia installato e funzionante per me, con xcode 4.6.3. – manylegged

2

Utilizzare strumenti, si otterrà l'esatto linea -

(in Xcode) Run attraverso "Prodotto" -> "Profilo"

Questo avvierà Instruments, lì. si dovrebbe scegliere "Zombies" e riprodurre l'evento bug.

You'l ottenere un pop-up, una volta uno zombie viene chiamato, premere il chevron per vedere l'esatta linea.

Il problema è di solito un cattivo __bridge (ponti opzionale __brige_retained/__bridge_transfer/__bridge)

+0

Questo ha funzionato perfettamente per me. Grazie mille! –

+0

Non vedo abbastanza la linea esatta. Cosa potrei fare di sbagliato? – lwdthe1

+0

@ lwdthe1 Puoi vedere nell'output di Xcode la Classe deallocata a cui è stato inviato il messaggio - ti darebbe un suggerimento riguardo l'istanza deallocata. – avishic

39

Vedi la mappa dei comandi LLDB-GDB (http://lldb.llvm.org/lldb-gdb.html) - è necessario importare uno script, e il comando si chiama malloc_info ora. Ovviamente, la registrazione dello stack malloc deve ancora essere attivata nelle opzioni dello schema.

(lldb) script import lldb.macosx.heap 
(lldb) malloc_info --stack-history 0x10010d680 

Purtroppo, non mostra dealloc di - non ha GDB malloc-storia mostrano che pure?

+0

quando ho guardato la pagina collegata, ha mostrato quei comandi come "disponibili solo su Mac OS X" –

+5

Per me, la prima riga doveva essere 'script di script import lldb.macosx.heap', altrimenti la console avrebbe segnalato 'errore : "malloc_info" non è un comando valido. " (Mac OS) –

+0

'(lldb) script import lldb.macosx.heap' * >>> comando" crashlog "e" save_crashlog "installato, utilizzare l'opzione" --help "per l'aiuto dettagliato " malloc_info "," ptr_refs "," cstr_refs "," find_variable "e" objc_refs "sono stati installati, utilizzare le opzioni" --help "su questi comandi per una guida dettagliata. * – tinkl