Ecco un'altra soluzione, non elegante come la precedente, ma se non hai aggiunto punti di interruzione o gestori di eccezioni, può essere solo una strada da percorrere.
Quando l'app si arresta in modo anomalo e ottieni il primo stack di chiamate raw (in numeri esadecimali), digita nella console Xcode info line *hex
(non dimenticare l' identificatore stella ed 0x
esadecimale), ad esempio:
(gdb) info line *0x2658
Line 15 of "path/to/file/main.m" starts at address 0x25f2 <main+50>
and ends at 0x267e <main+190>.
Se stai usando lldb , puoi digitareimage lookup -a hex
(senza asterisco in questa situazione) e ottenere un output simile.
Con questo metodo, puoi attraversare dalla cima dello stack di lancio (ci saranno circa 5-7 propagatori di eccezioni di sistema) alla tua funzione che ha causato un arresto anomalo e determinare il file e la riga di codice esatti.
Inoltre, per un effetto simile puoi usare l'utilità atos nel terminale, basta digitare:
atos -o path/to/AplicationBundle.app/Executable 0xAdress1 0xAdress2 0xAdress3 ...
e ottieni una traccia simbolica dello stack (almeno per le funzioni che hanno simboli di debug). Questo metodo è più preferibile, poiché non è necessario per ogni chiamata di indirizzo info line
, basta copiare gli indirizzi dall'output della console e incollarli nel terminale.