Log dei crash generati da iPhone Simulator?


96

Ci sono registri di arresto anomalo generati da iPhone Simulator?

il simulatore si blocca molto ma non lascia tracce nella console ... il registro dei crash sarà utile.


2
Non capisco bene perché hai bisogno dei registri dei crash. Quando l'app nel simulatore si arresta in modo anomalo ma prima di interrompere il debug, al prompt di gdb digita "bt" per "backtrace": otterrai esattamente ciò che apparirebbe nel registro degli arresti anomali. (non avevo capito che c'era una domanda sulla negromanzia qui, ho perso l'anno postale)
Matthew Frederick

3
Se il crash si è verificato solo quando non sei stato collegato dal debugger, allora avresti bisogno dei log.
Ian1971

hai ragione. questo ha senso!
Raptor

Puoi anche vedere il log di debug (incluso l'output dei comandi lldb) nel "Navigatore report" in Xcode (cmd-8). Ciò è utile anche per vedere l'output di debug per le esecuzioni precedenti. Se il debugger non era collegato, ovviamente non funzionerà.
Sebastien Martin

2
Il registro di debug non è lo stesso del registro di arresto anomalo, sebbene entrambi i registri siano utili per eseguire il debug del problema.
Raptor

Risposte:


157

La console mostrerà l' NSLog()output di un'app in esecuzione nel simulatore. I registri degli arresti anomali vengono salvati su file.

Ne ho trovati alcuni nella mia home directory sotto

~/Library/Logs/DiagnosticReports/

Hanno un'estensione di file .crash

Qualcosa che non ho ancora capito è come farli generare anche se il debugger cattura il EXC_BAD_ACCESSsegnale.


Aggiornare

Attualmente, (OSX 10.11.6), il .crash accede ~/Library/Logs/DiagnosticReports, quando l'emulatore stesso va in crash . I registri per un arresto anomalo di un'app (ma il dispositivo emulatore funziona ancora correttamente), sono in:

~ / Library / Logs / CoreSimulator

Per ogni crash, c'è una sottocartella con un ID univoco. Ordina per data, in modo che il tuo arresto anomalo recente sia la prima sottocartella. Al suo interno, inizia guardando stderr.loge system.log.

Anche direttamente sotto CoreSimulator, vedi CoreSimulator.loge Simulator.log.


Qualche idea sul perché questi log vengono scritti su file invece di essere visualizzati nella console? Grazie per le informazioni, btw.
acqua

11
Nessuno dei miei rapporti sugli arresti anomali nel simulatore di iPhone o iPad viene visualizzato in questa directory, forse questa risposta deve essere aggiornata?
Justin

3
Forse ha bisogno di un aggiornamento, ma un voto negativo non è un modo molto educato per incoraggiarlo.
ohhorob

2
Ho trovato il rapporto sull'arresto anomalo nella directory menzionata, ma c'era solo un rapporto e non era il più recente (cioè, ho continuato a provare alcune cose nell'app e continuava a bloccarsi). Gli arresti anomali erano tutti uguali, quindi non è stato un problema, ma mi chiedo se questo sia generalmente il caso?
Samik R

10
Sia Justin che ohhorob hanno ragione. Devi avviare l'app sul simulatore SENZA Xcode e riprodurre il crash per vedere i log in~/Library/Logs/DiagnosticReports/
Dave Chambers

20

Sono abbastanza sicuro che puoi vederlo nell'app OS X Console situata in Utilità. Se mi sbaglio, assicurati di votarmi, quindi lo elimino.


AGGIORNARE:

In particolare (a partire da OSX 10.11.6),

Quando un'app si arresta in modo anomalo sull'emulatore, viene aggiunta una sottocartella (con un ID univoco) a:

~ / Library / Logs / CoreSimulator

All'interno di ciò, inizia esaminando stderr.loge system.log.

Quando l'emulatore stesso si arresta in modo anomalo, viene aggiunta una sottocartella a:

~ / Library / Logs / DiagnosticReports

Non confondere questo percorso con

/ Libreria / Logs

(mancante ~all'inizio), che ha diversi rapporti sul tuo mac.



sembra che si applichi solo ai dispositivi iPhone, invece che al simulatore. Correggimi se sbaglio.
Raptor

7
La console può essere aperta dal simulatore premendo Cmd- / o utilizzando l'opzione di menu Debug / Apri registro di sistema ...
lambmj

5

Ecco qualcosa che ha funzionato per me in un caso speciale ... La mia app si arrestava in modo anomalo con SIGKILL mentre veniva terminata. Vorrei vedere l'eccezione in main.m per alcuni secondi, quindi l'app finirebbe di terminare, quindi nessuna possibilità di ottenere la traccia a ritroso.

Ho fatto molte ricerche su "dove il simulatore memorizza i suoi registri di arresto anomalo" e non sono mai riuscito a trovare una risposta. Tuttavia, il seguente trucco è stato molto utile e sono stato in grado di afferrare il registro dei crash al volo:

Fondamentalmente, apri /Applications/Utilities/CrashReporterPrefs.app e cambia l'impostazione in "Sviluppatore". Ciò farà sì che CrashReporter visualizzi un popup con il registro degli arresti anomali dopo l'arresto anomalo dell'app.

L'ho trovato nella sezione "Visualizzazione della console del simulatore iOS e dei registri degli arresti anomali" in questo documento di Apple: http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow/125-Using_iOS_Simulator/ios_simulator_application. html


Tra l'altro, il problema originale con SIGKILL che ero alla ricerca si è rivelato essere un non-problema: stackoverflow.com/questions/7901262/...
dana_a

Devo sottolineare che non c'era l'app CrashReporterPrefs in Application / Utilities, tuttavia l'ho cercata e sono riuscito a trovare l'app altrove.
Justin

@Justin dove l'hai trovato?
Ohad Schneider

1
Nota che lo strumento di cui sopra è scaricabile da Xcode in un bundle chiamato "Strumenti aggiuntivi per Xcode" developer.apple.com/download/more/…
markshiz

1

Questo è molto più affidabile. In pochi passaggi sono stato in grado di trovare il numero della riga di origine e il nome del metodo:

  1. cd nella directory contenente i file .app e .dSYM
  2. eseguire /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gdb/gdb-arm-apple-darwin MyApp.app/MyApp
  3. imposta print asm-demangle su
  4. imposta stampa nome file-simbolo su
  5. p / a 0 × 00015c64 -> indirizzo ottenuto aprendo il log di arresto anomalo nell'app "Console" o semplicemente facendo doppio clic sul file .crash.

3
Non capisco bene perché hai bisogno dei registri dei crash. Quando l'app nel simulatore si arresta in modo anomalo ma prima di interrompere il debug, al prompt di gdb digita "bt" per "backtrace": otterrai esattamente ciò che apparirebbe nel registro degli arresti anomali.
Matthew Frederick

Questo metodo funziona alla grande per i registri degli arresti anomali dai telefoni client.
Gamma-Point

1

I registri degli arresti anomali verranno visualizzati in ~ / Library / Logs / CrashReporter.

  • Se il programma di simulazione dell'iPhone si arresta in modo anomalo (non l'app per iPhone in esecuzione all'interno del simulatore), verrà visualizzata una voce per iPhoneSimulator.
  • Se l'app per iPhone all'interno del simulatore si arresta in modo anomalo, verrà visualizzato il registro degli arresti anomali con il nome visualizzato dell'app.

Quando Xcode riceve i registri di arresto anomalo da un dispositivo connesso, li memorizza in sottocartelle di ~ / Library / Logs / CrashReporter / MobileDevice


Questo è più di un anno dopo, ma vedo "l'app nel simulatore" si arresta in modo anomalo in ~ / Library / Logs / DiagnosticReports ... e sembra: MobileSafari_2013-03-21-155844_My-MacBook-Pro.crash
Rob

0

Per me, era un'espressione che avevo aggiunto alla finestra di visualizzazione del debugger. Quando veniva colpito un punto di interruzione, la cattiva espressione causava il segfault di XCode.

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.