Crash logs gerados pelo iPhone Simulator?

96

Há algum registro de travamento gerado pelo iPhone Simulator?

o Simulador trava muito, mas não deixa rastros no Console ... o registro de travamento será útil.

Raptor
fonte
2
Não entendo muito bem por que você precisa dos logs de travamento. Quando o aplicativo no simulador travar, mas antes de você interromper a depuração, no prompt do gdb digite "bt" para "backtrace" - você obterá exatamente o que apareceria no log de travamento. (não percebi que havia questão de necromancia aqui, perdi o ano da postagem)
Matthew Frederick
3
Se a falha ocorreu apenas quando você não estava conectado ao depurador, você precisaria dos logs.
Ian1971
você está certo. isso faz sentido!
Raptor
Você também pode ver o log de depuração (incluindo a saída de comandos lldb) no "Navegador de relatórios" no Xcode (cmd-8). Isso também é útil para ver a saída de depuração de execuções anteriores. Se o depurador não estiver conectado, isso obviamente não funcionará.
Sebastien Martin
2
O log de depuração não é o mesmo que o log de falha, embora ambos os logs sejam úteis para depurar o problema.
Raptor

Respostas:

157

O console mostrará a NSLog()saída de um aplicativo em execução no simulador. Os logs de travamento são salvos em arquivo.

Eu encontrei alguns no meu diretório inicial em

~/Library/Logs/DiagnosticReports/

Eles têm uma extensão de arquivo de .crash

Algo que ainda não descobri é como fazer com que eles sejam gerados, mesmo que o depurador pegue o EXC_BAD_ACCESSsinal.


Atualizar

Atualmente, (OSX 10.11.6), os registros .crash ~/Library/Logs/DiagnosticReportssão quando o próprio emulador trava . Os registros de falha de um aplicativo (mas o dispositivo do emulador ainda está funcionando bem) estão em:

~ / Library / Logs / CoreSimulator

Por falha, há uma subpasta com um id único. Classifique por data, para que sua falha recente seja a primeira subpasta. Dentro disso, comece olhando para stderr.loge system.log.

Também diretamente abaixo de CoreSimulator, consulte CoreSimulator.loge Simulator.log.

ohhorob
fonte
Alguma ideia de por que esses logs são gravados em um arquivo em vez de aparecer no console? Obrigado pela informação, btw.
aqua
11
Nenhum dos meus relatórios de falha no simulador de iPhone ou iPad aparece neste diretório, talvez esta resposta precise ser atualizada?
Justin
3
Talvez precise de uma atualização, mas uma votação negativa não é uma forma muito educada de incentivá-la.
ohhorob
2
Encontrei o relatório de travamento no diretório mencionado, mas havia apenas um relatório e não era o mais recente (ou seja, continuei tentando algumas coisas no aplicativo e ele travou). As falhas foram todas iguais, então não foi um problema, mas estou me perguntando se esse é geralmente o caso.
Samik R
10
Justin e ohhorob estão corretos. Você precisa iniciar o aplicativo no simulador SEM o Xcode e reproduzir a falha para ver os registros~/Library/Logs/DiagnosticReports/
Dave Chambers
20

Tenho certeza de que você pode ver isso no aplicativo OS X Console localizado em Utilitários. Se eu estiver errado, porém, certifique-se de votar em mim para que eu exclua isso.


ATUALIZAR:

Especificamente (conforme OSX 10.11.6),

Quando um aplicativo falha no emulador, uma subpasta (com um ID exclusivo) é adicionada a:

~ / Library / Logs / CoreSimulator

Dentro disso, comece examinando stderr.loge system.log.

Quando o próprio emulador falha, uma subpasta é adicionada a:

~ / Library / Logs / DiagnosticReports

Não confunda este caminho com

/ Biblioteca / Logs

(falta ~no início), que tem relatórios diferentes sobre o seu mac.

bpapa
fonte
Sim. Mais informações aqui developer.apple.com/iphone/library/documentation/Xcode/…
Brandon Bodnar
parece que se aplica apenas a dispositivos iPhone, em vez de simulador. Corrija-me se eu estiver errada.
Raptor
7
O console pode ser aberto no simulador pressionando Cmd- / ou usando a opção de menu Depurar / Abrir log do sistema ....
lambmj
5

Aqui está algo que funcionou para mim em um caso especial ... Meu aplicativo estava travando com o SIGKILL ao encerrar. Eu veria a exceção em main.m por alguns segundos e, em seguida, o aplicativo terminaria de encerrar - portanto, sem chance de obter o rastreamento de volta.

Fiz muitas pesquisas sobre “onde o simulador armazena seus logs de travamento” e nunca consegui encontrar uma resposta. No entanto, o seguinte truque foi muito útil e fui capaz de obter o registro de falhas na hora:

Basicamente, abra /Applications/Utilities/CrashReporterPrefs.app e altere a configuração para “Desenvolvedor”. Isso fará com que o CrashReporter exiba um pop-up com o log de travamento após o travamento do aplicativo.

Eu encontrei isso na seção “Visualizando o console do simulador iOS e logs de falha” neste documento da Apple: http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/ios_development_workflow/125-Using_iOS_Simulator/ios_simulator_application. html

dana_a
fonte
A propósito, o problema original com SIGKILL que eu estava pesquisando não era um problema: stackoverflow.com/questions/7901262/…
dana_a
Devo salientar que não havia um aplicativo CrashReporterPrefs em Application / Utilities, no entanto, procurei por ele e consegui encontrar o aplicativo em outro lugar.
Justin
@Justin onde você encontrou?
Ohad Schneider de
1
Observe que a ferramenta mencionada acima pode ser baixada do Xcode em um pacote chamado "Ferramentas adicionais para Xcode" developer.apple.com/download/more/…
markshiz
1

Isso é muito mais confiável. Em apenas algumas etapas, consegui encontrar o número da linha de origem e o nome do método:

  1. cd para o diretório com os arquivos .app e .dSYM
  2. execute /Developer/Platforms/iPhoneOS.platform/Developer/usr/libexec/gdb/gdb-arm-apple-darwin MyApp.app/MyApp
  3. definir imprimir asm-demangle em
  4. definir imprimir nome de arquivo-símbolo em
  5. p / a 0 × 00015c64 -> endereço obtido abrindo o registro de travamento no aplicativo “Console” ou apenas clicando duas vezes no arquivo .crash.
Gamma-Point
fonte
3
Não entendo muito bem por que você precisa dos logs de travamento. Quando o aplicativo no simulador travar, mas antes de você interromper a depuração, no prompt do gdb digite "bt" para "backtrace" - você obterá exatamente o que apareceria no log de travamento.
Matthew Frederick
Este método funciona muito bem para os logs de travamento de telefones clientes.
Gamma-Point
1

Os logs de travamento aparecerão em ~ / Library / Logs / CrashReporter.

  • Se o programa do simulador do iPhone travar (não o aplicativo do iPhone em execução no simulador), haverá uma entrada para o iPhoneSimulator.
  • Se o aplicativo do iPhone dentro do simulador travar, o log de travamento aparecerá com o nome de exibição do aplicativo.

Quando o Xcode obtém logs de travamento de um dispositivo conectado, ele os armazena em subpastas de ~ / Library / Logs / CrashReporter / MobileDevice

Walt Sellers
fonte
Isso se passou mais de um ano depois, mas eu vejo o "app dentro do simulador" travar em ~ / Library / Logs / DiagnosticReports ... e se parece com: MobileSafari_2013-03-21-155844_My-MacBook-Pro.crash
Rob
0

Para mim, foi uma expressão que adicionei à janela de observação do depurador. Quando um ponto de interrupção estava sendo atingido, a expressão incorreta estava causando o segfault do XCode.

pTymN
fonte