La estructura de composición del informe iOS_Crash

Un informe de fallo está estructurado de la siguiente manera, y cada sección contiene información que ayuda a localizar el fallo:
examinar-los-campos-en-un-informe-de-accidente


1. encabezado

Describa el entorno en el que ocurrió el bloqueo, incluido el dispositivo, el sistema, la hora, la versión y otra información. como:

Incident Identifier: 6156848E-344E-4D9E-84E0-87AFD0D0AE7B
CrashReporter Key:   76f2fb60060d6a7f814973377cbdc866fffd521f
Hardware Model:      iPhone8,1
Process:             TouchCanvas [1052]
Path:                /private/var/containers/Bundle/Application/51346174-37EF-4F60-B72D-8DE5F01035F5/TouchCanvas.app/TouchCanvas
Identifier:          com.example.apple-samplecode.TouchCanvas
Version:             1 (3.0)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.example.apple-samplecode.TouchCanvas [1806]


Date/Time:           2020-03-27 18:06:51.4969 -0700
Launch Time:         2020-03-27 18:06:31.7593 -0700
OS Version:          iPhone OS 13.3.1 (17D50)

2. Información de excepción

Información de excepción. Describe cómo finaliza un proceso, pero es posible que no explique completamente por qué finaliza el programa. como:

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x0000000102afb3d0
  • Exception Type: Nombre de excepción de Mach (señal de terminación BSD correspondiente)
  • Exception Codes: Información específica del controlador de excepciones, uno o más números hexadecimales de 64 bits. Normalmente, este campo no está presente porque el sistema operativo convierte la información en información legible por humanos a través de otros campos.
  • Exception Subtype: Subtipo de excepción
  • Exception Message:Información de descripción de excepción
  • Exception Note:Excepción información adicional.
    1. Si se incluye EXC_CORPSE_NOTIFY, el bloqueo no fue causado por un defecto de hardware, sino que podría ser causado por el sistema operativo o el proceso que llamó a la función abort(), lo que provocó que el proceso terminara.
    2. Si se incluye SIMULATED, el proceso no falló, pero el sistema operativo puede solicitar posteriormente que se finalice el proceso.
    3. Si se incluye NON-FATAL CONDITION(esto no es un bloqueo), el proceso no finalizará porque el problema al crear el informe de bloqueo no es fatal.
  • Termination Reason: Motivo de la terminación. El componente del sistema finalizará el proceso cuando encuentre un error fatal y registrará la información en este campo. En este campo se pueden encontrar mensajes como firma de código no válido, bibliotecas dependientes faltantes y acceso a información sensible a la privacidad sin cadenas específicas.
  • Triggered by Thread or Crashed Thread: El hilo que causó la excepción.

3. Mensajes de diagnóstico

Los sistemas operativos a veces incluyen información de diagnóstico adicional en una variedad de formatos, según la causa del fallo, y no se incluyen en todos los informes de fallos. como:

Application Specific Information:
BUG IN CLIENT OF LIBDISPATCH: dispatch_sync called on queue already owned by current thread

Application Specific Information: Un mensaje de error de trama que ocurre antes de que finalice el proceso
Termination Description. : La terminación debido a una violación del mecanismo de vigilancia contendrá este campo que describe el motivo por el cual se activó el mecanismo de vigilancia. como:

Termination Description: SPRINGBOARD, 
    scene-create watchdog transgression: application<com.example.MyCoolApp>:667
    exhausted real (wall clock) time allowance of 19.97 seconds 

4. Retrocesos

Cada subproceso del proceso que falla se captura como un rastreo, registrando el código que se ejecuta en el subproceso cuando finaliza el proceso.
Los bloqueos causados ​​por excepciones de idioma contienen un rastreo adicional, uno antes del primer hilo Last Exception Backtrace.

La primera línea de cada rastreo enumera el número y el nombre del hilo. Cada línea subsiguiente representa un marco de pila en el rastreo, y cada columna del marco de pila contiene información sobre el código que se ejecutó en el momento del bloqueo. como:

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   TouchCanvas                       0x0000000102afb3d0 CanvasView.updateEstimatedPropertiesForTouches(_:) + 62416 (CanvasView.swift:231)
1   TouchCanvas                       0x0000000102afb3d0 CanvasView.updateEstimatedPropertiesForTouches(_:) + 62416 (CanvasView.swift:231)
2   TouchCanvas                       0x0000000102af7d10 ViewController.touchesMoved(_:with:) + 48400 (<compiler-generated>:0)
3   TouchCanvas                       0x0000000102af80b8 @objc ViewController.touchesMoved(_:with:) + 49336 (<compiler-generated>:0)
4   UIKitCore                         0x00000001ba9d8da4 forwardTouchMethod + 328
5   UIKitCore                         0x00000001ba9d8e40 -[UIResponder touchesMoved:withEvent:] + 60
6   UIKitCore                         0x00000001ba9d8da4 forwardTouchMethod + 328
7   UIKitCore                         0x00000001ba9d8e40 -[UIResponder touchesMoved:withEvent:] + 60
8   UIKitCore                         0x00000001ba9e6ea4 -[UIWindow _sendTouchesForEvent:] + 1896
9   UIKitCore                         0x00000001ba9e8390 -[UIWindow sendEvent:] + 3352
10  UIKitCore                         0x00000001ba9c4a9c -[UIApplication sendEvent:] + 344
11  UIKitCore                         0x00000001baa3cc20 __dispatchPreprocessedEventFromEventQueue + 5880
12  UIKitCore                         0x00000001baa3f17c __handleEventQueueInternal + 4924
13  UIKitCore                         0x00000001baa37ff0 __handleHIDEventFetcherDrain + 108
14  CoreFoundation                    0x00000001b68a4a00 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
15  CoreFoundation                    0x00000001b68a4958 __CFRunLoopDoSource0 + 80
16  CoreFoundation                    0x00000001b68a40f0 __CFRunLoopDoSources0 + 180
17  CoreFoundation                    0x00000001b689f23c __CFRunLoopRun + 1080
18  CoreFoundation                    0x00000001b689eadc CFRunLoopRunSpecific + 464
19  GraphicsServices                  0x00000001c083f328 GSEventRunModal + 104
20  UIKitCore                         0x00000001ba9ac63c UIApplicationMain + 1936
21  TouchCanvas                       0x0000000102af16dc main + 22236 (AppDelegate.swift:12)
22  libdyld.dylib                     0x00000001b6728360 start + 4


Thread 1:
0   libsystem_pthread.dylib           0x00000001b6645758 start_wqthread + 0


Thread 2:
0   libsystem_pthread.dylib           0x00000001b6645758 start_wqthread + 0
...
  • La primera columna: número del marco de la pila. Los marcos de la pila están ordenados en el orden de llamada. El marco 0 es la función que se ejecuta cuando se detiene la ejecución, el marco 1 es la función que llama al marco 0, y así sucesivamente.

  • Segunda columna: Nombre del archivo binario que está ejecutando la función

  • La tercera columna: la dirección de la instrucción de la máquina que se está ejecutando. Para una pila que no colapsa, esta es la dirección de la primera instrucción de máquina ejecutada después de que el control regresa a este marco de pila.

  • Columna 4: en un informe de fallos totalmente simbólico, el nombre de la función que se está ejecutando.

  • Lo siguiente +数字: es el desplazamiento de bytes desde el punto de entrada de la función hasta la instrucción actual en la función.

  • (Nombre de archivo. Sufijo: número): nombre de archivo y número de línea. En algunos casos no se corresponde con el código fuente original:

    1. Si el nombre del archivo fuente es <compiler-generated>, entonces el compilador creó el código para ese marco y ese código no está en su archivo fuente. Si este es el fotograma superior del hilo que falla, mire los fotogramas de la pila anterior en busca de pistas.
    2. Si el número de línea del archivo fuente es 0, significa que el rastreo no se asigna a una línea de código específica en el código original. Porque el compilador optimizó el código (es decir, lo introvirtió) y el código ejecutado en el momento del fallo no correspondía a la línea exacta del código original. En este punto, el nombre de la función del marco sigue siendo sólo una pista.

5. Estado del hilo

La sección Estado del subproceso enumera los registros de la CPU y sus valores del subproceso bloqueado cuando finalizó el programa. como:

Thread 0 crashed with ARM Thread State (64-bit):
    x0: 0x0000000000000001   x1: 0x0000000000000000   x2: 0x0000000000000000   x3: 0x000000000000000f
    x4: 0x00000000000001c2   x5: 0x000000010327f6c0   x6: 0x000000010327f724   x7: 0x0000000000000120
    x8: 0x0000000000000001   x9: 0x0000000000000001  x10: 0x0000000000000001  x11: 0x0000000000000000
   x12: 0x00000001038612b0  x13: 0x000005a102b075a7  x14: 0x0000000000000100  x15: 0x0000010000000000
   x16: 0x00000001c3e6c630  x17: 0x00000001bae4bbf8  x18: 0x0000000000000000  x19: 0x0000000282c14280
   x20: 0x00000001fe64a3e0  x21: 0x4000000281f1df10  x22: 0x0000000000000001  x23: 0x0000000000000000
   x24: 0x0000000000000000  x25: 0x0000000282c14280  x26: 0x0000000103203140  x27: 0x00000001bacf4b7c
   x28: 0x00000001fe5ded08   fp: 0x000000016d311310   lr: 0x0000000102afb3d0
    sp: 0x000000016d311200   pc: 0x0000000102afb3d0 cpsr: 0x60000000
   esr: 0xf2000001  Address size fault

Comprender el estado del subproceso es un tema avanzado que requiere comprensión de la interfaz binaria del programa (ABI). Consulte Escritura de código ARM64 para plataformas Apple.
Los registros proporcionan información adicional sobre fallas causadas por accesos a la memoria. Para obtener más detalles, consulte Comprender los registros del subproceso bloqueado.


6. Imágenes binarias

Imagen binaria: la sección Imagen binaria del informe de fallos enumera todo el código cargado en el proceso en el momento de la terminación (como los ejecutables de la aplicación y los marcos del sistema). Cada línea en la sección de imagen binaria representa una imagen binaria, como por ejemplo:

Binary Images:
0x102aec000 - 0x102b03fff TouchCanvas arm64  <fe7745ae12db30fa886c8baa1980437a> /var/containers/Bundle/Application/51346174-37EF-4F60-B72D-8DE5F01035F5/TouchCanvas.app/TouchCanvas
...
  • La primera columna: el rango de direcciones de la imagen binaria dentro del proceso. La primera dirección es la dirección de carga del archivo binario.
  • Segunda columna: nombre binario
  • Columna 3: Arquitectura de CPU de la imagen binaria cargada por el sistema operativo en el proceso
  • La cuarta columna: UUID que identifica de forma única la imagen binaria, correspondiente al archivo dSYM
  • Columna 4: Ruta al archivo binario en el disco. (MacOS utiliza marcadores de posición para reemplazar los componentes de ruta reconocibles por el usuario para proteger la privacidad)

Referencia:
examinar los campos en un informe de fallos

Supongo que te gusta

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