unix crash gdb signals core

Encontrar la fuente de una señal UNIX de Coredump



crash gdb (2)

Esto ha sido una pregunta larga pendiente en mi mente. Veo que GDB nos dice la señal que causa la terminación del proceso.

¿Cómo encuentro la fuente de la señal desde un núcleo?

En dos ocasiones diferentes, mis dos aplicaciones recibieron SIGEMT y SIGUSR1. Sé que hay otras aplicaciones en producción que pueden enviar estas señales.

Además, sé que la información del remitente se puede ver dentro del programa en ejecución y los datos estarían presentes en la estructura siginfo_t . Pero no tengo ese lujo y, de hecho, no tenemos controlador para esta señal en absoluto.


También puede leer esta información del volcado del núcleo por eu-readelf :

$ eu-readelf --notes coredump | head Note segment of 3180 bytes at offset 0x4a0: Owner Data size Type CORE 336 PRSTATUS info.si_signo: 6, info.si_code: 0, info.si_errno: 0, cursig: 6 sigpend: <> sighold: <> pid: 28046, ppid: 3774, pgrp: 28046, sid: 3774 utime: 0.000000, stime: 0.002895, cutime: 0.000000, cstime: 0.000000 orig_rax: 35, fpvalid: 1

Nota info.si_signo: 6 , lo que significa que el proceso fue asesinado por SIGABRT.


Las versiones suficientemente recientes del kernel de Linux almacenan esta información en el archivo central. Y, las versiones recientes de gdb pueden leerlo. Luego puede usar print $_siginfo con un archivo core tal como lo haría al depurar en vivo.