Tipo de excepción iOS_Crash



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 ARMel procesador aparece como EXC_BREAKPOINT(SIGTRAP)
En x86_64el 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:
  1. En procesador ARM:
Exception Type:  EXC_BREAKPOINT (SIGTRAP)
...
Termination Signal: Trace/BPT trap: 5
Termination Reason: Namespace SIGNAL, Code 0x5
  1. 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 nilo 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 Informationregistran 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_ACCESSProblema 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_msgSendfunciones objc_retainy objc_releasedel 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 Backtracecontiene 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_ACCESSo 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 SIGSEGVo SEGV_MAPERRo 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 SubtypeContiene kern_return_tuna 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 CodesIncluido 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 instrucciones
  • KERN_PROTECTION_FAILURE: Intente utilizar una dirección de memoria válida protegida
  • KERN_MEMORY_ERROR: Memoria a la que intenta acceder pero no puede devolver datos, como por ejemplo: archivo asignado a memoria no disponible
  • EXC_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 InfoLos 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á 0x000000016c070a30ubicada 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 Infoobtener 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.

  1. 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.

  1. 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 SIGABRTuna 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 Backtracela 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 es doesNotRecoganizeSelector(_:), el bloqueo puede deberse a objetos zombies.

Si no hay Last Exception Backtraceindicios 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 Codesun Termination Descriptiondyld (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á SIGABRTuna señal para interrumpir el proceso. Los campos del informe Exception Subtypecontendrán LAUNCH_HANGinformació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 Reasonun 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
  1. 0x8badf00dperro 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 Reasonel 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 DescriptionContiene 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 DescriptionAparece 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 XMLParsery NSData.
Otros ejemplos comunes de redes implícitamente sincronizadas:

  • SCNetworkReachability: El valor predeterminado es sincrónico, como SCNetworkReachabilityGetFlags(_:_:)los métodos. se puede utilizar NWPathMonitoren su lugar.
  • Los métodos DNS proporcionados por BSD, como por ejemplo: gethostbyname(_:)y gethostbyaddr(_:_:_:)no son seguros para invocarlos en el hilo principal. getnameinfo(_:_:_:_:_:_:_:)y getaddrinfo(_:_:_:_:)solo son seguros si solo usa direcciones IP, no nombres DNS (es decir, especifica AI_NUMERICHOSTy respectivamente NI_NUMERICOST). Puede utilizar las API en CFHosto <dns_sd.h>en su lugar.

  1. 0xc00010fffiebre

(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.


  1. 0xdead10ccpunto 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.


  1. 0xbaadca11Error de acceso

(mala llamada) El sistema no pudo CallKitinformar una llamada en respuesta a PushKituna notificación para finalizar el programa


  1. 0xbad22222Llamadas frecuentes
    El sistema finalizó el programa VoIP porque se reanudó con demasiada frecuencia.

  1. 0xbaddd15cEspacio 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.

  1. 0xc51bad01WatchOS , 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.

  1. 0xc51bad02Timeout
    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.

  1. 0xc51bad03Sistema 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, esto 0xc51bad03no 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. SIGQUITEsto 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_GUARDRecursos 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 MessageLos 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 el F_DUPFDcomando F_DUPFD_CLOEXECo dup().dup2()fcntl()
  • NOCLOEXECFD_CLOEXEC: Bandera que indica que el programa está intentando eliminar un archivo protegido
  • SOCKET_IPC: El programa intenta socketenviar un archivo protegido a través de
  • FILEPORT: 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_RESOURCESe superó el límite de consumo de recursos

Notificación del sistema EXC_RESOURCEde que el proceso ha excedido los límites de consumo de recursos.
Si Exception Notese incluye el campo NON-FATAL CONDITION, el proceso no finalizará incluso si el sistema genera un informe de fallo.
Exception MessageEl campo describe la cantidad de recursos consumidos durante un intervalo de tiempo específico.
Exception SubtypeEl campo enumera recursos específicos:

  • CPUy CPU_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 sistema
  • IO: 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, como perform(_:on:with:waitUntilDone:), async(execute:)o dispatch_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

Supongo que te gusta

Origin blog.csdn.net/Margaret_MO/article/details/132649104
Recomendado
Clasificación