Come simboleggiare Xcode del registro degli arresti anomali?


190

L'organizzatore di Xcode 5 aveva una vista che elencava tutti i registri degli arresti anomali. e potremmo trascinare i log degli arresti anomali qui. Ma da Xcode 6, so che hanno spostato i dispositivi fuori organizzazione e hanno una nuova finestra per lo stesso. Ma non trovo un posto in cui visualizzo i registri degli arresti anomali che trascino in Xcode 5 dopo averlo spostato in Xcode 6. Qualcuno conosce la risposta?


3
Ho chiesto questo mesi fa sui forum degli sviluppatori di Apple e non ho mai avuto una risposta. Questa è una perdita di funzionalità utili. Invia una segnalazione di bug con Apple che chiede di ripristinare questa funzionalità.
rmaddy,

1
L'ho messo insieme nel corso di un fine settimana per risolvere la simbolizzazione dei dump di crash di iOS e OSX. È ancora molto agitato, ma dovrebbe funzionare. github.com/agentsim/Symbolicator
Tim

4
Xcode, per favore, puoi semplicemente simboleggiare i registri degli arresti anomali dei revisori Apple come dovresti ... piuttosto che supporre che abbiamo letteralmente tutto il giorno per capire come fare?
William Entriken,

Risposte:


120

Ok ho capito che puoi farlo:

  1. In Xcode > Window > Devices, seleziona un iPhone / iPad / etc collegato in alto a sinistra.
  2. Visualizza registri dispositivo
  3. Tutti i registri

Probabilmente ci sono molti registri lì, e per rendere più facile trovare il registro importato in un secondo momento, potresti semplicemente andare avanti ed eliminare tutti i registri a questo punto ... a meno che non significino denaro per te. O a meno che tu non conosca il momento esatto in cui si è verificato l'incidente - dovrebbe comunque essere scritto nel file ... Sono pigro, quindi elimino solo tutti i vecchi registri (ciò ha richiesto del tempo).

  1. Basta trascinare e rilasciare il file in quell'elenco. Ha funzionato per me.

13
Sto riscontrando lo stesso problema, ma questo non risolve il problema per me: vengono visualizzati i registri che trascino e trascino nella finestra, ma non simboleggiano.
Arkaaito,

9
Il trucco è che devi connettere un dispositivo e selezionare il dispositivo dall'elenco. Non credo sia possibile senza un dispositivo.
Jonny,

61
Affinché il tuo file di arresto anomalo sia trascinabile in tale elenco, dovrebbe avere l'estensione .crash.
pjay_

7
Il passo mancante per me è stato una volta che il file è stato lasciato cadere, dovevo fare clic con il pulsante destro del mouse sul file e
ripetere la

6
Non dimenticare di "Scarica dSYMs" per quell'archivio all'interno di Organizer.
123FLO321

259

Scrivi questa risposta tanto per la comunità quanto per me stesso.

Se ci sono mai problemi che simboleggiano un rapporto di arresto anomalo, si possono superare come segue:

  1. Crea una cartella separata, copia Foo.appe Foo.app.dSYMdalla corrispondente .xcarchivenella cartella. Copia anche il .crashrapporto nella cartella.

  2. Apri il rapporto sugli arresti anomali in TextEdit o altrove, vai alla Binary Images:sezione e copia lì il primo indirizzo (ad es 0xd7000.).

  3. cdnella cartella. Ora puoi eseguire il seguente comando:

    xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 0x0033f9bb

Questo simboleggia il simbolo all'indirizzo 0x0033f9bb. Assicurati di scegliere il valore corretto per l' -archopzione (può essere otturato dalla prima riga nella Binary Images:sezione o individuato dal Hardware Model:rapporto di arresto anomalo e dagli archi supportati dell'app).

Puoi anche copiare gli indirizzi necessari (ad es. Uno stack di chiamate thread) dal rapporto sugli arresti anomali direttamente in un file di testo (in TextEdit, tieni premuto Opzione e seleziona il blocco di testo necessario, oppure copia e taglia), per ottenere qualcosa del genere:

0x000f12fb
0x002726b7
0x0026d415
0x001f933b
0x001f86d3

Ora puoi salvarlo in un file di testo, ad esempio addr.txt, ed eseguire il comando seguente:

xcrun atos -o Foo.app/Foo -arch arm64 -l 0xd7000 -f addr.txt

Questo darà una bella simbolizzazione per tutti gli indirizzi contemporaneamente.

PS

Prima di fare quanto sopra, vale la pena verificare che tutto sia impostato correttamente (poiché atossegnalerà felicemente qualcosa per praticamente qualsiasi indirizzo fornito).

Per eseguire il controllo, apri il rapporto sugli arresti anomali e vai alla fine dello stack di chiamate per Thread 0. La prima riga dalla fine per elencare la tua app (di solito la seconda), ad esempio:

34  Foo                    0x0033f9bb 0xd7000 + 2525627

dovrebbe essere la main()chiamata. Simbolizzare l'indirizzo ( 0x0033f9bbin questo caso) come descritto sopra dovrebbe confermare che questo è effettivamente main()e non un metodo o una funzione casuali.

Se l'indirizzo non è quello di main(), controlla il tuo indirizzo di caricamento ( -lopzione) e arch ( -archopzione).

PPS

Se quanto sopra non funziona a causa del bitcode , scarica il dSYM per la tua build da iTunes Connect, estrai il file binario eseguibile dal dSYM (Finder> Mostra contenuto pacchetto), copialo nella directory e usalo (es. Foo) Come argomento a atos, anziché il Foo.app/Foo.


2
grazie per il problema di scrivere il mini tutorial xcrun e aggiornarlo con la sezione di controllo di integrità. la mia sanità mentale viene salvata dopo parecchie imprecazioni e nessun simbolismo in vista
Anton Tropashko,

10
Non dimenticare di confermare che il rapporto sugli arresti anomali corrisponde all'eseguibile e al dSYM. Puoi verificarlo abbinando l'identificatore nella sezione <> nella sezione Immagine binaria con quello restituito dal tuo file eseguibile eseguendoxcrun dwarfdump --uuid <path to executable>
Ryan C. Payne,

2
È importante notare che verranno visualizzati solo i simboli della tua app (Foo). Non verrà visualizzato per i simboli di librerie / framework esterni, come Foundation o libsystem_kernel.dylib.
jlukanta,

1
questo è utile, ma non funziona ancora per me. la parte con cui ho problemi è che non ho le informazioni 0xd7000. la mia riga è simile a 0x100038328 __mh_execute_header + 99112. Ho letto cos'è __mh_execute_header ma come posso ottenere informazioni su 0x100038328 ??? ho tutto il resto
skinsfan00atg

5
Ho scritto un semplice script bash che fa la maggior parte del lavoro per te. Utilizzo: ./symbolicate.sh mycrash.crash MyApp.app arch64 output.crash solo simboleggerà il rapporto completo di crash e ti darà la versione simbolizzata di esso. gist.github.com/nathan-fiscaletti/…
Nathan F.

187

Puoi fare riferimento anche a questo, ho scritto la procedura passo per passo della rimodellazione simbolica manuale.

Riconfigurazione di crash

PASSO 1

Sposta tutti i file sopra (MyApp.app, MyApp-dSYM.dSYM e MyApp-Crash-log.crash) in una cartella con un nome comodo ovunque tu possa andare facilmente usando Terminal.

Per me, Desktop è il posto più facilmente raggiungibile;) Quindi, ho spostato questi tre file in una cartella MyApp sul desktop.

PASSO 2

Ora è il turno di Finder, vai al percorso dal seguente qualunque sia applicabile per la tua versione XCODE.

Utilizzare questo comando per trovare il symbolicatecrashfile di script,
find /Applications/Xcode.app -name symbolicatecrash

Xcode 8, Xcode 9, Xcode 11 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

Xcode 7.3 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

XCode 7 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

Xcode 6 /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources

Inferiore a Xcode 6 Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources

O Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources

PASSAGGIO 3

Aggiungi la directory del file di script symbolicatecrash trovata alla $PATHvariabile env in questo modo: sudo vim /etc/paths.d/Xcode-symbolicatecrashe incolla la directory del file di script e salva il file. Quando si apre un nuovo terminale, è possibile chiamare symbolicatecrashin qualsiasi cartella come comandi situati in/usr/bin .

O

Copia il file symbolicatecrash da questa posizione e incollalo sul Desktop / MyApp (Aspetta ... Non seguirmi ciecamente, sto incollando il file Sybolicatecrash nella cartella MyApp, uno che hai creato nel passaggio 1 nella posizione preferita, con tre file. )

PASSAGGIO 4

Apri Terminale e CD nella cartella MyApp.

cd Desktop/MyApp — Press Enter
export DEVELOPER_DIR=$(xcode-select --print-path)

 -  Premi Invio

./symbolicatecrash -v MyApp-Crash-log.crash MyApp.dSYM

 -  Premi Invio

Questo è tutto !! I log simbolizzati sono sul tuo terminale ... ora cosa stai aspettando? Ora semplicemente, scopri l'errore e risolvilo;)

Buona programmazione !!!


2
@ EmilVikström: Grazie per il suggerimento, ho aggiornato la risposta.
Mrug,

2
Usa export DEVELOPER_DIR =xcode-select --print-path
Parag Bafna,

8
Ha funzionato a meraviglia - grazie. Solo una cosa che ho dovuto usare export DEVELOPER_DIR = / Applications / XCode.app / Contents / Developer (senza virgolette).
goelectric,

1
"export DEVELOPER_DIR = xcode-select --print-path" mi dice solo "-bash: export:` --print-path ': non un identificatore valido
Almo

2
aggiornare; Ecco qui ; per xcode7 trova symbolicatecrash qui; /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resource/sestrice/ stack / 32804611 /…
AnneTheAgile

28

Per me il file .crash è stato sufficiente. Senza file .dSYM e file .app.

Ho eseguito questi due comandi sul Mac in cui ho creato l'archivio e ha funzionato:

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" 

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash  /yourPath/crash1.crash > /yourPath/crash1_symbolicated.crash

Wow. Non so come funzioni senza il file .dsym ma funziona!
RustyMagnet,

4
@rustyMagnet Il modo in cui funziona è usando dsyms dalle build archiviate sul tuo computer.
Andrey Tarantsov,

1
Sì, questo funziona solo per build che hai archiviato con Xcode, non per qualsiasi altra build che potresti aver generato per esecuzioni ad hoc per le quali desideri simboleggiare i log degli arresti anomali.
CMash

21

C'è un modo più semplice usando Xcode (senza usare gli strumenti da riga di comando e cercare gli indirizzi uno alla volta)

  1. Prendi qualsiasi file .xcarchive. Se ne hai uno da prima puoi usarlo. Se non ne hai uno, creane uno eseguendo il prodotto> Archivia da Xcode.

  2. Fare clic con il tasto destro sul file .xcarchive e selezionare 'Mostra contenuto pacchetto'

  3. Copia il file dsym (della versione dell'app che si è arrestata in modo anomalo) nella cartella dSYMs

  4. Copia il file .app (della versione dell'app che si è arrestata in modo anomalo) nella cartella Prodotti> Applicazioni

  5. Modifica Info.plist e modifica CFBundleShortVersionString e CFBundleVersion nel dizionario ApplicationProperties. Questo ti aiuterà a identificare l'archivio in un secondo momento

  6. Fare doppio clic su .xcarchive per importarlo in Xcode. Dovrebbe aprire Organizer.

  7. Torna al registro degli arresti anomali (nella finestra Dispositivi in ​​Xcode)

  8. Trascina lì il tuo file .crash (se non già presente)

  9. L'intero registro degli arresti anomali dovrebbe ora essere simbolizzato. In caso contrario, fai clic con il pulsante destro del mouse e seleziona "Riconoscimento del registro degli arresti anomali"


1
La tua risposta è corretta e semplice. Non è necessario utilizzare l'app Terminale. La ricreazione della cartella .xcarchive è molto importante, poiché non esiste alcun file .xcarchive in alcuni sistemi di integrazione continua, anziché la sfera zip della cartella .app.dSYM. Per coincidenza, quello che ho fatto ieri è esattamente lo stesso che hai detto.
DawnSong

come dovrebbe essere l'output completo?
noobsmcgoobs,

Questo in parte simboleggia i miei registri degli arresti anomali, anche se ho saltato il passaggio 3-5 poiché il mio xcarchive è per la versione dell'app che si è arrestata in modo anomalo.
Declan McKenna,

1
Ovviamente simboleggerà solo il tuo codice, non il codice della libreria esterna che potresti aver usato.
RPM

7

Segui questi passaggi in Xcode 10 per simboleggiare un registro degli arresti anomali da un'app sviluppata sullo stesso computer:

  1. All'interno di Organizer , individua l'archivio su cui si basa l'app.
  2. Fai clic sul pulsante Scarica simboli di debug . Non verrà visualizzato nulla nella cartella Download, ma va bene.
  3. Connetti la build machine a un dispositivo iOS.
  4. Seleziona il dispositivo in Dispositivi e simulatori .
  5. Fare clic sul pulsante Visualizza registri dispositivi .
  6. Trascina e rilascia il file di arresto anomalo sul pannello di sinistra. Il file deve terminare con un .crash un'estensione , altrimenti il ​​trascinamento non riesce.
  7. Passa alla scheda Tutti i registri .
  8. Seleziona il file di crash aggiunto.
  9. Il file dovrebbe simbolizzare automaticamente, altrimenti utilizzare la voce di menu contestuale del tasto destro del mouse Re-Symbolicate Log .

1
All'inizio non pensavo che questo aggiungesse qualcosa ad altri post, ma i primi due passaggi, in particolare i "Download Debug Symbols", sembra essere quello che mi mancava. Grazie.
Christopher King,

6

Se hai il file .dSYM e il file .crash nella stessa sottocartella, questi sono i passaggi che puoi eseguire:

  1. Osservando il backtrace nel file .crash, notare il nome dell'immagine binaria nella seconda colonna e l'indirizzo nella terza colonna (ad es. 0x00000001000effdc nell'esempio seguente).
  2. Proprio sotto il backtrace, nella sezione "Immagini binarie", notare il nome dell'immagine, l'architettura (ad esempio arm64) e l'indirizzo di caricamento (0x1000e4000 nell'esempio seguente) dell'immagine binaria (ad esempio TheElements).
  3. Eseguire quanto segue:

$ atos -arch arm64 -o TheElements.app.dSYM/Contents/Resources/DWARF/TheElements -l 0x1000e4000 0x00000001000effdc -[AtomicElementViewController myTransitionDidStop:finished:context:]

Fonte autorevole: https://developer.apple.com/library/content/technotes/tn2151/_index.html#//apple_ref/doc/uid/DTS40008184-CH1-SYMBOLICATE_WITH_ATOS


4

Xcode 11.2.1, dicembre 2019

Apple ti dà il registro degli arresti anomali in formato .txt, che non è simbolizzato

**

Con il dispositivo collegato

**

  • Scarica il file ".txt", cambia l'estensione in ".crash" inserisci qui la descrizione dell'immagine
    • Apri dispositivi e simulatori dalla scheda della finestra in Xcode
    • seleziona dispositivo e seleziona registri dispositivo
    • trascina e rilascia il file .crash nella finestra di registro del dispositivo

inserisci qui la descrizione dell'immagine

Lì potremo vedere log di crash simbolizzati

Si prega di consultare il link per maggiori dettagli sui log di crash dei simboli


Wow. È stata cambiata l'estensione del file da .txt a .crash. Mi hanno dato un file .txt. Grazie uomo. Non riesco a credere che la tua risposta sia così bassa.
datWooWoo

3

Assicurati che il nome dell'applicazione Xcode non contenga spazi. Questo è stato il motivo per cui non ha funzionato per me. Quindi /Applications/Xcode.appfunziona, mentre /Applications/Xcode 6.1.1.appnon funziona.


Hai provato? In caso contrario, prova a vedere se il tuo commento ha un senso.
Bouke,

1
Non è lo stesso problema di cui sto parlando. Xcode può essere rinominato dopo l'installazione, ma prima del primo utilizzo. Tuttavia, lo script per la simbolizzazione non può gestire gli spazi nel nome dell'applicazione e fallirà.
Bouke,

1
@ChuckKrutsinger Hai davvero provato? Perché gli spazi di escape ti permetteranno di eseguire lo script, ma lo script stesso fallirà. Probabilmente lo script non chiama altri script con lo spazio di escape.
Bouke,

1
@ChuckKrutsinger È molto bello e tutto, ma se si desidera che Xcode simboleggi automaticamente il registro degli arresti anomali, alla fine avrò bisogno della mia risposta.
Bouke,

1
Vorrei ribadire che bouke è corretto e che se si dispone di uno spazio nel percorso per l'app Xcode, lo script utilizzato da Xcode per re-simbolizzare i log degli arresti anomali NON funzionerà. Niente a che vedere con la rimodellizzazione manuale.
Gary Makin,

2

Dai documenti di Apple:

Simbolizzazione dei rapporti sugli arresti anomali con Xcode Xcode tenterà automaticamente di simboleggiare tutti i rapporti sugli arresti anomali che incontra. Tutto ciò che devi fare per la simbolizzazione è aggiungere il rapporto sugli arresti anomali a Xcode Organizer.

  • Collega un dispositivo iOS al tuo Mac
  • Scegli "Dispositivi" dal menu "Finestra"
  • Nella sezione "DISPOSITIVI" nella colonna di sinistra, seleziona un dispositivo
  • Fai clic sul pulsante "Visualizza registri dispositivo" nella sezione "Informazioni dispositivo" sul pannello di destra
  • Trascina il rapporto sugli arresti anomali nella colonna di sinistra del pannello presentato
  • Xcode simboleggia automaticamente il rapporto di arresto anomalo e visualizza i risultati Per simboleggiare un rapporto di arresto anomalo, Xcode deve essere in grado di individuare quanto segue:

    1. Il file binario e dSYM dell'applicazione in crash.

    2. I file binari e dSYM per tutti i framework personalizzati a cui l'applicazione collega. Per i framework creati dall'origine con l'applicazione, i loro file dSYM vengono copiati nell'archivio insieme al file dSYM dell'applicazione. Per i framework creati da terze parti, è necessario chiedere all'autore il file dSYM.

    3. Simboli per il sistema operativo su cui l'applicazione era in esecuzione in caso di arresto anomalo. Questi simboli contengono informazioni di debug per i framework inclusi in una versione specifica del sistema operativo (ad es. IOS 9.3.3). I simboli del sistema operativo sono specifici dell'architettura: una versione di iOS per dispositivi a 64 bit non includerà i simboli armv7. Xcode copierà automaticamente i simboli del sistema operativo da ciascun dispositivo collegato al Mac.

Se uno di questi manca Xcode potrebbe non essere in grado di simboleggiare il rapporto di arresto anomalo o potrebbe simboleggiare solo parzialmente il rapporto di arresto anomalo.


2

Il processo più semplice per simboleggiare i registri degli arresti anomali:

  1. preservare il file xcarchive dall'organizzatore durante il processo di creazione IPA per un utilizzo futuro.
  2. Quando si verifica l'incidente, raccogliere i registri degli arresti anomali dal dispositivo interessato. L'estensione dovrebbe essere .crash. Se il registro degli arresti anomali è in formato .ips, rinominalo in .crash.
  3. Fare doppio clic su xcarchive dal percorso memorizzato per farlo apparire nell'organizzatore (se non già presente).
  4. apri nella finestra xcode-> dispositivi e simulatori -> visualizza i registri dei dispositivi -> tutti i registri -> trascina e rilascia il file .crash.

Attendi 5 secondi. Scoppio! l'applicazione chiama in traccia stack sarà simbolizzata! Potresti comunque vedere molti simboli! quelli sono chiamate interne alla libreria e al framework.

Questo è il più semplice, provato e testato!


2

Apple ti dà il registro degli arresti anomali in formato .txt, che non è simbolizzato

**

Con il dispositivo collegato

**

  • Scarica il file ".txt", cambia l'estensione in ".crash" inserisci qui la descrizione dell'immagine
    • Apri dispositivi e simulatori dalla scheda della finestra in Xcode
    • seleziona dispositivo e seleziona registri dispositivo
    • trascina e rilascia il file .crash nella finestra di registro del dispositivo

inserisci qui la descrizione dell'immagine

Lì potremo vedere log di crash simbolizzati

Si prega di consultare il link per maggiori dettagli sui log di crash dei simboli

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.