Simbolizando um log de travamento do iOS sem o arquivo dSYM original

Se você é como eu e sempre tem problemas com os processos “fáceis” de simbolizar um log de travamento (arraste-o para o Organizer … como se), ainda pode usar força bruta no processo de simbolização para chegar aos rastreamentos de pilha relevantes. Primeiro, isso exige que você tenha pelo menos a versão binária exata do aplicativo em que o travamento ocorreu (mas você não precisa do dSYM). Se você não tiver certeza de qual versão do aplicativo o log de travamento veio, você pode comparar o UUID mencionado no log de travamento com o UUID de quaisquer binários relevantes que você possa ter salvo localmente. Você pode encontrar o UUID da compilação de seu aplicativo local executando …

dwarfdump -u /path/to/MyApp.app/MyApp

Você pode começar tentando simbolizar o log de travamento com uma falha simbólica. Geralmente, isso pelo menos preencherá as chamadas do sistema para você. Você pode deixar de fora o parâmetro dSYM que poderia ter usado de outra forma.

symbolicatecrash /path/to/MyApp_2012-10-01_Device.crash

Apenas para a posteridade, caso você tenha o dSYM, você pode usá-lo da seguinte forma:

symbolicatecrash /path/to/MyApp_2012-10-01_Device.crash /path/to/MyApp.app.dSYM

Se funcionar, você tem sorte e não precisa se preocupar com o resto desta postagem.

Configurando o método de conveniência agradável que usei acima:

alias symbolicatecrash='/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash'

Para encontrar o desastre simbólico, deve ser diferente do meu alias acima:

find /Applications/Xcode.app -name symbolicatecrash -type f

E, caso você obtenha um erro de que DEVELOPER_DIR não pode ser encontrado:

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

Em seguida, use atos para simbolizar cada endereço de memória individualmente. Extraia o endereço da memória do texto real do log de travamento. Certifique-se de usar a versão de arquitetura correta para o dispositivo agora que temos armv7s para prestar atenção também.

atos -arch armv7 -o /path/to/MyApp.app/MyApp 0x0003b508

Repita isso para cada método que você deseja simbolizar. É demorado, mas se você não tiver outras opções, isso pelo menos desvendará o mistério para você.

Suspeito que essas ferramentas exigirão que você tenha instalado as ferramentas de linha de comando por meio do Xcode manualmente, uma vez que não estão mais incluídas no download básico. No entanto, eu nunca tentei executá-los sem ter feito essa instalação primeiro, então não posso dizer com certeza.

De qualquer forma, espero que isso ajude quando você estiver na difícil situação de não ter o dSYM original, ou se seu log de travamento não estiver simbolizando corretamente por qualquer outro motivo irritante.