Directorio de artículos
-
- 1. `EXC_BREAKPOINT (SIGTRAP)` y `EXC_BAD_INSTRUCTION (SIGILL)`
- 2. Problema de acceso a la memoria `EXC_BAD_ACCESS`
- 3. `EXC_CRASH(SIGABRT)`
- 4. `EXC_CRASH(SIGKILL)`
- 5. `EXC_CRASH(SIGQUIT)` termina a petición de otro proceso
- 6. Recursos protegidos `EXC_GUARD`
- 7. `EXC_RESOURCE` excede el límite de consumo de recursos
Directorio de artículos
-
- 1. `EXC_BREAKPOINT (SIGTRAP)` y `EXC_BAD_INSTRUCTION (SIGILL)`
- 2. Problema de acceso a la memoria `EXC_BAD_ACCESS`
- 3. `EXC_CRASH(SIGABRT)`
- 4. `EXC_CRASH(SIGKILL)`
- 5. `EXC_CRASH(SIGQUIT)` termina a petición de otro proceso
- 6. Recursos protegidos `EXC_GUARD`
- 7. `EXC_RESOURCE` excede el límite de consumo de recursos
1.Y EXC_BREAKPOINT (SIGTRAP)
_EXC_BAD_INSTRUCTION (SIGILL)
El tipo de excepción de punto de interrupción indica que 跟踪陷阱
( trace trap
) interrumpió el proceso. 跟踪陷阱
Le da a un depurador adjunto la oportunidad de interrumpir un proceso en puntos específicos de su ejecución.
En ARM
el procesador aparece como EXC_BREAKPOINT(SIGTRAP)
En x86_64
el procesador aparece comoEXC_BAD_INSTRUCTION(SIGILL)
- Errores de tiempo de ejecución de Swift
Swift utiliza tecnología de seguridad de memoria para detectar errores de programación de manera temprana. Si el tiempo de ejecución de Swift encuentra un error de programación, detecta el error y bloquea intencionalmente el programa; estos fallos tienen información de excepción identificable en el informe de fallos:
- En procesador ARM:
Exception Type: EXC_BREAKPOINT (SIGTRAP)
...
Termination Signal: Trace/BPT trap: 5
Termination Reason: Namespace SIGNAL, Code 0x5
- En procesadores Intel:
Exception Type: EXC_BAD_INSTRUCTION (SIGILL)
...
Exception Note: EXC_CORPSE_NOTIFY
Termination Signal: Illegal instruction: 4
Termination Reason: Namespace SIGNAL, Code 0x4
Las razones comunes incluyen: usar !
la fuerza para desencapsular un valor opcional nil
o usar as!
la conversión forzada para que falle.
Algunas bibliotecas de bajo nivel, como Dispatch
, detectan este tipo de excepción cuando encuentran un error irrecuperable y Additional Diagnostic Information
registran información adicional sobre el error en .
Si desea utilizar la misma técnica en su propio código para manejar errores irrecuperables, llame a __builtin_trap()
la función, que permitirá al sistema generar un informe de fallas con un rastreo de subprocesos que muestra cómo el código alcanzó el error irrecuperable.
2. EXC_BAD_ACCESS
Problema de acceso a la memoria
2.1 Objetos zombis
Una vez liberado el objeto, se le envía un mensaje, que el objeto zombie recibe en tiempo de ejecución. El envío de mensajes a objetos liberados puede provocar que las objc_msgSend
funciones objc_retain
y objc_release
del tiempo de ejecución de OC fallen. como:
Thread 0 Crashed:
0 libobjc.A.dylib 0x00000001a186d190 objc_msgSend + 16
1 Foundation 0x00000001a1f31238 __NSThreadPerformPerform + 232
2 CoreFoundation 0x00000001a1ac67e0 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
Otro posible bloqueo debido a objetos zombies Last Exception Backtrace
contiene doesNotRecognizeSelector(_:)
:
Last Exception Backtrace:
0 CoreFoundation 0x1bf596a48 __exceptionPreprocess + 220
1 libobjc.A.dylib 0x1bf2bdfa4 objc_exception_throw + 55
2 CoreFoundation 0x1bf49a5a8 -[NSObject+ 193960 (NSObject) doesNotRecognizeSelector:] + 139
Si el fallo se puede reproducir, el registro de la consola es el siguiente:
Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[NSNumberFormatter playSound]:
unrecognized selector sent to instance 0x28360dac0'
El ejemplo envió un mensaje no implementado al objeto, por lo que falló.
2.2 Problema de acceso a la memoria
Informes de fallos que provocan problemas de acceso a la memoria cuando un programa utiliza la memoria de forma inesperada. Los tipos de excepción reportados para estos son EXC_BAD_ACCESS
o EXC_BAD_ACCESS (SIGBUS)
. como:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000
Los problemas de acceso a la memoria en macOS a veces solo pueden identificarse mediante señales, como SIGSEGV
o SEGV_MAPERR
o SEGV_NOOP
:
Exception Type: SIGSEGV
Exception Codes: SEGV_MAPERR at 0x41e0af0c5ab8
Las herramientas de Xcode para depurar el acceso a la memoria incluyen:
- Desinfectante de direcciones
- Desinfectante de comportamiento indefinido
- Desinfectante de hilos
Si su programa contiene código Objective-C, C o C++, puede utilizar un analizador estático para identificar errores de programación comunes.
2.2.1 Subtipos de excepción
Exception Subtype
Contiene kern_return_t
una descripción del error y la dirección de memoria a la que se accedió incorrectamente, como por ejemplo:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000
Exception Codes
Incluido en macOS Exception Subtype
:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_MEMORY_ERROR at 0x00000001098c1000
Subtipos de excepción:
KERN_INVALID_ADDRESS
: acceda a la memoria no asignada accediendo a datos o obteniendo instruccionesKERN_PROTECTION_FAILURE
: Intente utilizar una dirección de memoria válida protegidaKERN_MEMORY_ERROR
: Memoria a la que intenta acceder pero no puede devolver datos, como por ejemplo: archivo asignado a memoria no disponibleEXC_ARM_DA_ALIGN
: intento de acceder a la memoria que no está alineada correctamente. Este código de excepción es poco común porque las CPU ARM de 64 bits manejan los datos como están alineados.
El marco de la CPU arm64e utiliza un código de autenticación de puntero firmado criptográficamente para detectar y evitar cambios accidentales en los punteros en la memoria. El bloqueo debido a un error de autenticación del puntero tendrá información adicional:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Subtype: KERN_INVALID_ADDRESS at 0x00006f126c1a9aa0 -> 0x000000126c1a9aa0 (possible pointer authentication failure)
Para obtener más información sobre la autenticación de puntero, consulte Preparar su aplicación para que funcione con la autenticación de puntero.
2.2.2. Información de la región de la máquina virtual
VM Region Info
Los campos que muestran las características de la memoria de acceso errante se ubican en relación con el resto del espacio de direcciones de la aplicación, como por ejemplo:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000
VM Region Info: 0 is not in any region. Bytes before following region: 4307009536
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
UNUSED SPACE AT START
--->
__TEXT 0000000100b7c000-0000000100b84000 [ 32K] r-x/r-x SM=COW ...pp/MyGreatApp
La referencia a una memoria no asignada provoca un bloqueo 0x0000000000000000
, que es una dirección no válida, es decir, un puntero NULL. Esta ubicación de dirección no válida es un byte dentro de un área de memoria válida en el control de direcciones de la aplicación 4307009536
.
Además, por ejemplo:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Subtype: KERN_PROTECTION_FAILURE at 0x000000016c070a30
VM Region Info: 0x16c070a30 is in 0x16c070000-0x16c074000; bytes after start: 2608 bytes before end: 13775
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
Stack 000000016bfe8000-000000016c070000 [ 544K] rw-/rwx SM=COW thread 12
---> STACK GUARD 000000016c070000-000000016c074000 [ 16K] ---/rwx SM=NUL ...for thread 11
Stack 000000016c074000-000000016c0fc000 [ 544K] rw-/rwx SM=COW thread 11
La dirección de memoria está 0x000000016c070a30
ubicada en un área de memoria especial protegida por la pila identificada por la flecha, que almacena la pila de un subproceso de la pila de otro subproceso. La columna PRT muestra los atributos de permiso actuales del área de memoria: r significa legible, w significa escribible y x significa ejecutable. El acceso no es válido porque no hay permiso y el informe de fallos identifica que este acceso a la memoria viola un atributo de protección de la memoria.
La protección de pila es sólo un ejemplo de memoria protegida; existen otros tipos de áreas de memoria protegidas con diferentes combinaciones de atributos de protección.
Para VM Region Info
obtener más información, consulte: Interpretación de la salida de vmmap
2.2.3 Tipos de acceso a la memoria
El registro de conteo contiene la dirección de la instrucción que causó la excepción de acceso a la memoria.
- Lectura de memoria no válida: cuando el código elimina la referencia a un puntero no válido. El registro de recuento es diferente de la dirección de excepción. como:
Exception Type: SIGSEGV
Exception Codes: SEGV_MAPERR at 0x21474feae2c8
...
Thread 12 crashed with X86-64 Thread State:
rip: 0x00007fff61f5739d rbp: 0x00007000026c72c0 rsp: 0x00007000026c7248 rax: 0xe85e2965c85400b4
rbx: 0x00006000023ee2b0 rcx: 0x00007f9273022990 rdx: 0x00007000026c6d88 rdi: 0x00006000023ee2b0
rsi: 0x00007fff358aae0f r8: 0x00000000000003ff r9: 0x00006000023edbc0 r10: 0x000021474feae2b0
r11: 0x00007fff358aae0f r12: 0x000060000237af10 r13: 0x00007fff61f57380 r14: 0x00006000023ee2b0
r15: 0x0000000000000006 rflags: 0x0000000000010202 cs: 0x000000000000002b fs: 0x0000000000000000
gs: 0x0000000000000000
El registro de recuento es 0x00007fff61f5739d, que es diferente de la dirección de excepción 0x21474feae2c8.
- Lectura de instrucción no válida: cuando una función salta a otra función a través de un puntero de función incorrecto o mediante una llamada de función en un objeto inesperado. El registro es el mismo que la dirección de excepción. como:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000040
...
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 ??? 0x0000000000000040 0 + 64
...
Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000000000002 x1: 0x0000000000000040 x2: 0x0000000000000001 x3: 0x000000016dcfe080
x4: 0x0000000000000010 x5: 0x000000016dcfdc8f x6: 0x000000016dcfdd80 x7: 0x0000000000000000
x8: 0x000000010210d3c8 x9: 0x0000000000000000 x10: 0x0000000000000014 x11: 0x0000000102835948
x12: 0x0000000000000014 x13: 0x0000000000000000 x14: 0x0000000000000001 x15: 0x0000000000000000
x16: 0x000000010210c0b8 x17: 0x00000001021063b0 x18: 0x0000000000000000 x19: 0x0000000102402b80
x20: 0x0000000102402b80 x21: 0x0000000204f6b000 x22: 0x00000001f6e6f984 x23: 0x0000000000000001
x24: 0x0000000000000001 x25: 0x00000001fc47b690 x26: 0x0000000102304040 x27: 0x0000000204eea000
x28: 0x00000001f6e78fae fp: 0x000000016dcfdec0 lr: 0x00000001021063c4
sp: 0x000000016dcfdec0 pc: 0x0000000000000040 cpsr: 0x40000000
esr: 0x82000006 (Instruction Abort) Translation fault
Binary Images:
0x102100000 - 0x102107fff MyCoolApp arm64 <87760ecf8573392ca5795f0db63a44e2> /var/containers/Bundle/Application/686CA3F1-6CC5-4F84-8126-EE22D03BC161/MyCoolApp.app/MyCoolApp
El registro de recuento es 0x0000000000000040, que es coherente con la dirección informada en el subtipo de excepción. Debido a que fue una búsqueda de instrucción incorrecta, el cuadro 0 en el rastreo no contiene la función en ejecución (es ???, no el nombre del símbolo). El registro de enlace lr normalmente contiene la ubicación a la que regresará el código después de la llamada, y se puede rastrear el puntero de instrucción defectuoso.
El registro de enlace 0x00000001021063c4 es la dirección de la instrucción en el archivo binario cargado en el proceso de solicitud, y la sección de imagen binaria muestra que esta dirección se encuentra dentro del archivo binario.
Las direcciones de retorno de la arquitectura de CPU x86_64 se almacenan en la pila en lugar de en registros de enlace, por lo que no se puede rastrear el origen del puntero de función.
3.EXC_CRASH(SIGABRT)
Indica que el proceso finalizó después de recibir SIGABRT
una señal. Generalmente esta señal se debe a que el proceso llamó abort()
a una función.
Si la aplicación encuentra una excepción de lenguaje OC o C++ no detectada.
3.1 Anomalías del lenguaje
El marco del sistema de Apple genera excepciones de lenguaje cuando encuentra ciertos tipos de errores de programación en tiempo de ejecución, como acceder a una matriz en un índice fuera de límites o no implementar un método requerido por el protocolo. Este tipo de excepción contiene la siguiente información:
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
El bloqueo causado por una excepción de idioma incluye Last Exception Backtrace
:
Last Exception Backtrace:
0 CoreFoundation 0x19aae2a48 __exceptionPreprocess + 220
1 libobjc.A.dylib 0x19a809fa4 objc_exception_throw + 55
Según Last Exception Backtrace
la información de la pila, se puede localizar el código que provocó la excepción.
Nota: Apple no proporciona rastreo de código para fallas causadas por excepciones de C++.
Nota: Si la API que genera la excepción esdoesNotRecoganizeSelector(_:)
, el bloqueo puede deberse a objetos zombies.
Si no hay Last Exception Backtrace
indicios de que una excepción de idioma haya desencadenado el bloqueo, mire el rastreo del subproceso que se bloqueó para determinar si se llamó al código del proceso abort()
.
3.2 Error de configuración: falta marco
Si el programa falla porque falta un marco necesario, el informe contendrá una descripción EXC_CRASH (SIGABRT)
de Exception Codes
un Termination Description
dyld (que identifica el vinculador dinámico) que no pudo encontrar el marco específico. como:
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Description: DYLD, dependent dylib '@rpath/MyFramework.framework/MyFramework'
not found for '<path>/MyCoolApp.app/MyCoolApp', tried but didn't find:
'/usr/lib/swift/MyFramework.framework/MyFramework'
'<path>/MyCoolApp.app/Frameworks/MyFramework.framework/MyFramework'
'@rpath/MyFramework.framework/MyFramework'
'/System/Library/Frameworks/MyFramework.framework/MyFramework'
Cuando la extensión de una aplicación pasa demasiado tiempo en initialize
, el sistema enviará SIGABRT
una señal para interrumpir el proceso. Los campos del informe Exception Subtype
contendrán LAUNCH_HANG
información. Debido a que las extensiones no tienen una función principal, el tiempo dedicado a la inicialización ocurre en constructores y load()
métodos estáticos en la extensión y las bibliotecas dependientes, aunque la información de excepción es diferente de la del perro guardián.
4.EXC_CRASH(SIGKILL)
El sistema operativo finalizó el proceso y reportó Termination Reason
un código que explica la causa del bloqueo. como:
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace RUNNINGBOARD, Code 0xdead10cc
0x8badf00d
perro guardián
(comió mala comida) El sistema operativo utiliza el perro guardián para monitorear la capacidad de respuesta de las aplicaciones, y el perro guardián finalizará las aplicaciones que no respondan durante mucho tiempo. Informe de fallo finalizado por el organismo de control, Termination Reason
el código es 0x8badf00d
. Por ejemplo:
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d
Termination Description
Contiene información sobre cómo la aplicación emplea su tiempo, como por ejemplo:
Termination Description: SPRINGBOARD,
scene-create watchdog transgression: application<com.example.MyCoolApp>:667
exhausted real (wall clock) time allowance of 19.97 seconds
| ProcessVisibility: Foreground
| ProcessState: Running
| WatchdogEvent: scene-create
| WatchdogVisibility: Foreground
| WatchdogCPUStatistics: (
| "Elapsed total CPU time (seconds): 15.290 (user 15.290, system 0.000), 28% CPU",
| "Elapsed application CPU time (seconds): 0.367, 1% CPU"
| )
Termination Description
Aparece en:
scene-create
: Indica que el primer fotograma de la UI no se muestra en la pantalla dentro del evento permitido
scene-update
: Indica que no está actualizando su UI lo suficientemente rápido porque el hilo principal está demasiado ocupado.
Elapsed total CPU time
: muestra cuánto tiempo ha estado funcionando la CPU dentro de los eventos del reloj de pared para todos los procesos del sistema. (Esta vez es la utilización total de la CPU entre CPU, que puede exceder el 100%. Por ejemplo: una utilización de la CPU es del 100% y la segunda utilización es del 20%, la utilización total es del 120%). Este número está en cualquier extremo. Ambos son indicadores de un problema, si es demasiado alto, la aplicación está haciendo mucho trabajo en todos sus subprocesos (incluidos todos los subprocesos, no solo el subproceso principal); si es demasiado bajo, la aplicación está mayoritariamente inactiva porque está esperando recursos del sistema , como conexiones de red.
El rastreo del hilo principal no necesariamente contiene el origen del problema. Por ejemplo: una tarea tarda 4 segundos, pero el tiempo total permitido del reloj de pared es de 5 segundos. Cuando el perro guardián finaliza el programa después de 5 segundos, el código que tardó 4 segundos no aparecerá en el rastreo porque ya se completó, pero consumió casi todo el tiempo del reloj de pared. Los informes de fallos registran un rastreo de lo que estaba haciendo el organismo de control cuando finalizó el programa, incluso si no era el origen del problema.
Código de red de sincronización oculto:
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00000001c22f8670 semaphore_wait_trap + 8
1 libdispatch.dylib 0x00000001c2195890 _dispatch_sema4_wait$VARIANT$mp + 24
2 libdispatch.dylib 0x00000001c2195ed4 _dispatch_semaphore_wait_slow + 140
3 CFNetwork 0x00000001c57d9d34 CFURLConnectionSendSynchronousRequest + 388
4 CFNetwork 0x00000001c5753988 +[NSURLConnection sendSynchronousRequest:returningResponse:error:] + 116 + 14728
5 Foundation 0x00000001c287821c -[NSString initWithContentsOfURL:usedEncoding:error:] + 256
6 libswiftFoundation.dylib 0x00000001f7127284 NSString.__allocating_init+ 680580 (contentsOf:usedEncoding:) + 104
7 libswiftFoundation.dylib 0x00000001f712738c String.init+ 680844 (contentsOf:) + 96
8 MyCoolApp 0x00000001009d31e0 ViewController.loadData() (in MyCoolApp) (ViewController.swift:21)
El ejemplo está en el cuadro 7. Llamar init(contentsOf:)
al método activará implícitamente una solicitud de red síncrona antes de regresar (volverá inmediatamente si la red es buena, pero llevará mucho tiempo si la red es deficiente). Lo mismo ocurre con otras clases inicializadas por URL, como XMLParser
y NSData
.
Otros ejemplos comunes de redes implícitamente sincronizadas:
SCNetworkReachability
: El valor predeterminado es sincrónico, comoSCNetworkReachabilityGetFlags(_:_:)
los métodos. se puede utilizarNWPathMonitor
en su lugar.- Los métodos DNS proporcionados por BSD, como por ejemplo:
gethostbyname(_:)
ygethostbyaddr(_:_:_:)
no son seguros para invocarlos en el hilo principal.getnameinfo(_:_:_:_:_:_:_:)
ygetaddrinfo(_:_:_:_:)
solo son seguros si solo usa direcciones IP, no nombres DNS (es decir, especificaAI_NUMERICHOST
y respectivamenteNI_NUMERICOST
). Puede utilizar las API enCFHost
o<dns_sd.h>
en su lugar.
0xc00010ff
fiebre
(enfriamiento) El sistema finalizó el programa debido a un evento térmico. Podría ser un problema con el dispositivo específico que falla o el entorno en el que se ejecuta. Para obtener información sobre cómo hacer que los programas se ejecuten de manera más eficiente, consulte Rendimiento de iOS y optimización de energía con instrumentos.
0xdead10cc
punto muerto
(bloqueo muerto) El sistema finalizó el programa porque retuvo un bloqueo de archivo o un bloqueo de base de datos SQLite durante el período de suspensión. Úselo beginBackgroundTask(withName:expirationHandler:)
para solicitar tiempo de ejecución en segundo plano adicional en el hilo principal. Esta solicitud se emite antes de que comience la escritura en el archivo para que se puedan completar estas operaciones y liberar el bloqueo antes de que la aplicación se cuelgue. Utilícelo en extensiones del programa beginActivity(options:reason:)
para gestionar este trabajo.
0xbaadca11
Error de acceso
(mala llamada) El sistema no pudo CallKit
informar una llamada en respuesta a PushKit
una notificación para finalizar el programa
0xbad22222
Llamadas frecuentes
El sistema finalizó el programa VoIP porque se reanudó con demasiada frecuencia.
0xbaddd15c
Espacio insuficiente
(disco defectuoso) El sistema finaliza el programa para eliminar el caché en un intento de recuperar espacio en el disco. Muchos factores pueden provocar una falta de espacio en disco y se recomienda minimizar lo que se escribe en el disco y administrar todo el ciclo de vida de los archivos.
0xc51bad01
WatchOS , que acapara la CPU,
finalizó el programa porque estaba usando demasiado tiempo de CPU mientras realizaba tareas en segundo plano. Optimice el código que realiza tareas en segundo plano para proporcionar eficiencia de la CPU o reduzca la cantidad de trabajo que realiza el programa mientras se ejecuta en segundo plano para resolver este bloqueo.
0xc51bad02
Timeout
watchOS finaliza el programa porque no pudo completar una tarea en segundo plano dentro del tiempo asignado. Reduzca la cantidad de trabajo que realiza el programa mientras se ejecuta en segundo plano para resolver este bloqueo.
0xc51bad03
Sistema ocupado
watchOS finalizó el programa porque no pudo completar una tarea en segundo plano dentro del tiempo asignado, pero el sistema en general estaba lo suficientemente ocupado como para que el programa probablemente no tuviera mucho tiempo de CPU para realizar tareas en segundo plano. Aunque el problema se puede evitar reduciendo la cantidad de trabajo que realiza la aplicación en tareas en segundo plano, esto0xc51bad03
no indica que la aplicación haya hecho algo mal. Lo más probable es que la aplicación no pueda completar su trabajo debido a la carga general del sistema.
5. EXC_CRASH(SIGQUIT)
Terminar a petición de otro proceso.
EXC_CRASH (信号退出)
Indica que el proceso finalizó a petición de otro proceso que tiene permiso para gestionar su ciclo de vida. SIGQUIT
Esto no significa que el proceso haya fallado, pero es posible que se haya comportado mal de manera detectable.
Si la extensión de teclado de iOS y iPadOS tarda demasiado en cargarse, la aplicación principal finaliza la extensión de teclado. Aunque es diferente de la información de excepción del perro guardián, consulte:2.4.1. 0x8badf00d watchdog
6. EXC_GUARD
Recursos protegidos
Un proceso invadió un recurso protegido. Aunque existen muchos tipos de recursos del sistema protegidos, la mayoría de las fallas de recursos protegidos tienen descripciones de archivos protegidos que tienen valores en los campos. El sistema marca las descripciones de los archivos como protegidas para que no puedan ser modificadas por la API de descripción de archivos normal.
Exception Message
Los campos contienen infracciones específicas:
CLOSE
: El programa intenta realizar una llamada a un archivo protegidoclose()
DUP
: El programa intenta llamar a , o al archivo protegido mediante elF_DUPFD
comandoF_DUPFD_CLOEXEC
odup()
.dup2()
fcntl()
NOCLOEXEC
FD_CLOEXEC
: Bandera que indica que el programa está intentando eliminar un archivo protegidoSOCKET_IPC
: El programa intentasocket
enviar un archivo protegido a través deFILEPORT
: El programa intenta obtener derechos de envío Mach para un archivo protegido.WRITE
: El programa intenta escribir en una descripción de archivo protegido
7. EXC_RESOURCE
Se superó el límite de consumo de recursos
Notificación del sistema EXC_RESOURCE
de que el proceso ha excedido los límites de consumo de recursos.
Si Exception Note
se incluye el campo NON-FATAL CONDITION
, el proceso no finalizará incluso si el sistema genera un informe de fallo.
Exception Message
El campo describe la cantidad de recursos consumidos durante un intervalo de tiempo específico.
Exception Subtype
El campo enumera recursos específicos:
CPU
yCPU_FATAL
: Los subprocesos de un proceso ocupan demasiada CPU durante un corto período de tiempo.MEMORY
: El proceso ha excedido el límite de memoria establecido por el sistemaIO
: El proceso escribe demasiado en el disco en un corto período de tiempo.WAKEUPS
: Un subproceso en un proceso se activa demasiadas veces por segundo, lo que consume batería. Las API de comunicación de subprocesos, comoperform(_:on:with:waitUntilDone:)
,async(execute:)
odispatch_async
, pueden provocar este bloqueo cuando las llamadas no intencionadas dan como resultado una frecuencia mucho mayor de lo esperado. Debido a que la comunicación que desencadena esta excepción ocurre con frecuencia, a menudo varios subprocesos en segundo plano tienen rastreos muy similares que indican el origen de la comunicación del subproceso. Aprenda cómo administrar cargas de trabajo simultáneas de manera más efectiva en Modernización del uso de Grand Central Dispatch
Descripción:
Identificar la causa de fallos comunes
Analizar un informe de fallos
Abordar fallos de excepción de idioma
Comprender los tipos de excepción en un informe de fallos
Señal (IPC)
Investigar fallos de acceso a memoria
Abordar terminaciones de vigilancia