2012-05-22 15 views
13

Estoy usando Xcode 4.3.1. El accidente ocurrió en el dispositivo, por lo que conectarlo y abrir Organizador, vaya a mis registros del dispositivo, encontrar el informe de bloqueo, y esto es lo que se lee:¿Por qué mis informes de fallos no están simbolizados?

Exception Type: EXC_CRASH (SIGABRT) 
Exception Codes: 0x00000000, 0x00000000 
Crashed Thread: 0 

Last Exception Backtrace: 
0 CoreFoundation     0x3514488f __exceptionPreprocess + 163 
1 libobjc.A.dylib     0x3656b259 objc_exception_throw + 33 
2 CoreFoundation     0x35144789 +[NSException raise:format:] + 1 
3 CoreFoundation     0x351447ab +[NSException raise:format:] + 35 
4 CoreFoundation     0x350b168b -[__NSCFDictionary setObject:forKey:] + 235 
5 myapp       0x0015b4a7 0xe8000 + 472231 
6 myapp       0x0018add1 0xe8000 + 667089 
7 myapp       0x0013cd5b 0xe8000 + 347483 
8 Foundation      0x30ffb60d __NSFireTimer + 145 
9 CoreFoundation     0x35118a33 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 15 
10 CoreFoundation     0x35118699 __CFRunLoopDoTimer + 365 
11 CoreFoundation     0x3511726f __CFRunLoopRun + 1207 
12 CoreFoundation     0x3509a4a5 CFRunLoopRunSpecific + 301 
13 CoreFoundation     0x3509a36d CFRunLoopRunInMode + 105 
14 GraphicsServices    0x36396439 GSEventRunModal + 137 
15 UIKit       0x32190e7d UIApplicationMain + 1081 
16 myapp       0x000f6aff 0xe8000 + 60159 
17 myapp       0x000e9370 0xe8000 + 4976 


Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libsystem_kernel.dylib   0x34f3832c __pthread_kill + 8 
1 libsystem_c.dylib    0x36e34208 pthread_kill + 48 
2 libsystem_c.dylib    0x36e2d298 abort + 88 
3 libc++abi.dylib     0x30af9f64 abort_message + 40 
4 libc++abi.dylib     0x30af7346 _ZL17default_terminatev + 18 
5 libobjc.A.dylib     0x3656b350 _objc_terminate + 140 
6 libc++abi.dylib     0x30af73be _ZL19safe_handler_callerPFvvE + 70 
7 libc++abi.dylib     0x30af744a std::terminate() + 14 
8 libc++abi.dylib     0x30af881e __cxa_rethrow + 82 
9 libobjc.A.dylib     0x3656b2a2 objc_exception_rethrow + 6 
10 CoreFoundation     0x3509a506 CFRunLoopRunSpecific + 398 
11 CoreFoundation     0x3509a366 CFRunLoopRunInMode + 98 
12 GraphicsServices    0x36396432 GSEventRunModal + 130 
13 UIKit       0x32190e76 UIApplicationMain + 1074 
14 myapp       0x000f6af8 0xe8000 + 60152 
15 myapp       0x000e9368 0xe8000 + 4968 

pensé Xcode maneja symbolicating los informes de fallos para mí ¿automáticamente? ¿Por qué no obtengo ningún número de línea o método? ¿Y por qué mis códigos de excepción son 0x00000000?

Intenté the method found here, pero cuando escribo en cualquiera de las direcciones de memoria, la salida es exactamente la misma dirección de memoria. ¿Es esta la mayor información que puedo obtener de los registros de bloqueo, o hay algo mal aquí?

+0

¿Ha intentado ejecutar el informe de bloqueo a través de [atos] (https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/atos.1.html)? – lottscarson

+0

Sí, probé el método que se encuentra en el enlace de arriba, que es el método de atos, pero cualquiera que sea la dirección de memoria que escriba después de 'atos -arch armv7 -o 'myapp.app'/'myapp' MEMORY ADDRESS', simplemente cierra la sesión Tecleo la dirección de la memoria, por lo que la salida aquí sería MEMORY ADDRESS – Snowman

+0

Otra cosa: el último accidente que ocurrió esta mañana, y cambié un par de líneas de código (cosas de la interfaz) y lo construí. No suelo archivar ni nada, solo compilación. Entonces, el registro de bloqueo que tengo proviene de una compilación anterior (aunque no ha cambiado mucho). Si no uso la opción de archivo, ¿podría ser esta la razón? – Snowman

Respuesta

8

Para simbolizar el informe de fallas necesita el paquete dSYM de esa compilación exacta. Supongo que se trata de una compilación de depuración que no se archivó, por lo que también se sobreescribió el dSYM la próxima vez que compile la aplicación. Esta es la razón por la cual el organizador no pudo simbolizar completamente el informe de fallas.

El método que mencionaste solo funciona si el binario no tiene símbolos eliminados, ¡y aun así no informaría los números de línea! Entonces, en lugar de usarlo contra el binario de la aplicación, mejor úsela con el dSYM. Quizás tengas suerte y el nuevo dSYM aún tenga información útil.

atos -arch armv7 -o 'appname.app.dSYM' 0x0015b4a7

El accidente en sí podría estar preparando un valor NSDictionary a, por ejemplo una llave nula

+2

Afortunadamente con la versión 4.3.2 Xcode para mí, los registros están simbolizados con los números de línea y sin el archivo de compilación actual teniendo el 'Strip Debug Symbols During Copy 'establecido en' NO' para las configuraciones de depuración. –

+0

Entonces el dSYM todavía está disponible en su Mac. El script de simbolización lo busca usando Spotlight. Los símbolos que son parte del ejecutable no proporcionan números de línea. Nunca. – Kerni

+0

tiene sentido, gracias. –

8

Con la esperanza de que esto pueda ayudar a otra persona con el mismo problema, lo que funcionó para mí fue ejecutar el siguiente comando en el directorio de archivo (se parece a/Users/my_user/Library/Developer/Xcode/Archives/2012-09 -24, entonces cd allí primero)

mdimport . 

Intente ejecutar el script symbolicatecrash después de eso. En XCode, vaya a su Organizador, Registros de dispositivos y seleccione "Volver a simbolizar el registro" haciendo clic derecho en el registro de bloqueo.

+2

Esto funcionó perfectamente para una aplicación que tengo en el mercado. ¡Brillante! ¿Qué te llevó a encontrar esto? – paiego

+0

Esto funcionó perfectamente para mí también. –

+0

¡Funcionó para mí también! ¡Gracias! –

4

No pude obtener el XCode 4.5.1 para simbolizar arrastrando el informe de fallos a Organizer-> Devices-> Library-> Device Logs.

Tampoco pude obtener la dirección simbolizada del bloqueo especificando dSYM según la publicación anterior por @Kerni.

He usado atos, pero solo pude hacerlo funcionar especificando la ruta completa del archivo de símbolos dentro del archivo xcarchive (en realidad es un directorio). Ejemplo:

cd dir_where_the_xcarchive_is 
atos -arch armv7 -o myApp\ 9-18-12\ 5.28\ PM.xcarchive/dSYMs/myApp.app.dSYM/Contents/Resources/DWARF/myApp 0x0001943a 
1

cuanto a su pregunta acerca de los códigos de excepción ...

Exception Codes: 0x00000000, 0x00000000 

... this Apple Technical Note podría responder a su pregunta. En resumen, este informe de fallos no fue generado por un tipo de bloqueo documentado estándar.

Cerca de 16 líneas en el registro de bloqueo, verá una línea que comienza con el texto seguido de uno o más valores hexadecimales, que son códigos específicos del procesador que se le puede dar más información sobre la naturaleza del choque.Usted puede decir de estos códigos si la aplicación estrelló debido a un error de programación (por ejemplo, un mal acceso a la memoria, una excepción, etc), o si la aplicación se terminó por alguna otra motivo, por ejemplo:

El código de excepción 0x8badf00d indica que una aplicación ha sido terminada por iOS porque se produjo un tiempo de espera de watchdog. La aplicación tardó demasiado en iniciarse, finalizar o responder a eventos del sistema. Una causa común de esto es hacer una red síncrona en el hilo principal . El código de excepción 0xbad22222 indica que una aplicación VoIP ha sido cancelada por iOS porque se ha reiniciado también con . El código de excepción 0xdead10cc indica que una aplicación ha sido cancelada por iOS porque se aferró a un recurso del sistema (como la base de datos de la libreta de direcciones) mientras se ejecuta en el fondo . El código de excepción 0xdeadfa11 indicaba que el usuario había renunciado forzosamente a una solicitud . La fuerza se cierra cuando el usuario mantiene presionado el botón de encendido/apagado hasta que aparezca "slide to power off" , luego mantiene presionado el botón de inicio. Es razonable suponer que el usuario ha hecho esto porque la aplicación se ha convertido en que no responde, pero no está garantizado. Force quit funcionará en cualquier aplicación .

0

Use Crashlytics en su lugar.

Proporciona al instante (recibir notificaciones por correo electrónico) sobre los informes de fallas en tiempo real, y el número de línea exacto de donde se produjo un bloqueo.

Cuestiones relacionadas