Tipos de exception en los loggings de locking de iOS

He visto algunos types diferentes de loggings de lockings desde que comencé a aprender el desarrollo de iOS.

Sé que: Tipo de exception: EXC_BAD_ACCESS (SIGSEGV) significa que estamos accediendo a un object liberado.

pero no sabe:
Tipo de exception: EXC_BAD_ACCESS (SIGBUS)
Tipo de exception: EXC_CRASH (SIGABRT)
Tipo de exception: EXC_BREAKPOINT (SIGTRAP)

¿Sabes cuántos Tipos de Excepción en los loggings de fallas de iOS y qué significan?

Sé que: Tipo de exception: EXC_BAD_ACCESS (SIGSEGV) significa que estamos accediendo a un object liberado.

No.

Un SIGSEGV es un error de segmentación, lo que significa que está intentando acceder a una dirección de memory inválida.

Esas excepciones (de hecho, son señales) no están relacionadas con Objective-C, pero C. Por lo tanto, puede get dicha exception sin objects Objective-C.

Tenga en count que una señal no es una exception, lo que significa que no puede atraparlos con los bloques @try y @catch .

Puede configurar un controller de señal con las funciones de signal y sigaction . Tenga en count algunas señales, como SIGABRT no se puede bloquear.

Puede consultar la página de Wikipedia sobre las señales, si desea más información.

Dicho esto, para reanudar:

SIGSEGV (falla de segmentación)

Acceso a una dirección de memory inválida. La dirección existe, pero su progtwig no tiene acceso a él.

SIGBUS (error del bus)

Acceso a una dirección de memory inválida. La dirección no existe o la alignment no es válida.

SIGFPE (exception de punto flotante)

Operación aritmética no válida. Puede relacionarse con operaciones enteras, a pesar del nombre.

SIGPIPE

Tuberia rota.

SIGILL

Instrucción de procesador ilegal.

SIGTRAP

Depurador relacionado

SIGABRT

Caída del progtwig, no relacionada con una de las señales anteriores.

SIGSEGV literalmente significa que está accediendo a una dirección que no es suya. Por lo tanto, no es necesariamente que esté accediendo a un object lanzado; podría estar accediendo a un object que nunca existió, como en:

 UIView *view; // uninitialised, could point to anything [view setFrame:someFrame]; 

O incluso simplemente cometiendo un error en cosas que no son de object de nivel C, como por ejemplo:

 int array[100]; array[1000] = 23; // out-of-bounds access 

SIGBUS es muy similar a SIGSEGV, la diferencia está en el nivel de hardware (generalmente la diferencia entre tratar de acceder a una dirección que existe pero que no posee y tratar de acceder a una dirección que no tiene nada detrás de ella, pero esa no es una definición estricta), pero generalmente se asocia con el mismo tipo de errores, aunque es mucho más probable que un SIGBUS tenga que ver con una variable no inicializada que un SIGSEGV.

Si está tratando de mapear los errores que probablemente haya realizado en Objective-C, probablemente solo quiera leer SIGSEGV y SIGBUS juntos, lo que significa "un acceso de memory que no tenía derecho a hacer".

SIGABRT es un progtwig que intenta abortarse, por lo que generalmente significa que ha fallado algún tipo de comprobación de consistencia interna. Por ejemplo, SIGABRT se genera si intenta liberar la misma memory dos veces, o – en el nivel de Cocoa – si raise una NSException que no está atrapada. Si obtiene un SIGABRT, ha hecho algo mal que es detectado por el software del sistema (a diferencia de SEGV y BUS, que surgen en el hardware).

SIGTRAP es una llamada desde el progtwig a un depurador. Anecdóticamente, Apple parece usarlos cuando hace algo mal que puede detectarse en el software, pero se relaciona con el entorno en lugar de su código específico. Por ejemplo, llama a una function C que existe en el SDK con el que creó pero no en el dispositivo en el que está ejecutando (por ejemplo, cuando comstack contra el último SDK con un destino de deployment menor) o hace algo similar con un object.

Estos posts son de gdb y no son exclusivos para el objective-C. Para get información sobre las señales todo lo que tiene que hacer es ingresar info signals en la console del depurador, este es un ejemplo de salida . Perdón por no publicarlo aquí, pero el formatting de salida de la console es horrible.

Fuente y más información sobre señales