Tenemos una versión integrada del kernel de Linux ejecutándose en un núcleo de MIP. El programa que hemos escrito ejecuta un conjunto de pruebas particular. Durante una de las pruebas de estrés (se ejecuta durante aproximadamente 12 horas) obtenemos un fallo seg. Esto a su vez genera un volcado de núcleo.Obteniendo una mejor depuración cuando Linux falla en un programa en C
Desafortunadamente, el volcado del núcleo no es muy útil. El bloqueo está en alguna biblioteca del sistema que está vinculada dinámicamente (probablemente pthread o glibc). La traza en el volcado de memoria no es muy útil, ya que sólo muestra el punto de choque y no hay otras personas que llaman (nuestra aplicación de espacio de usuario se construye con -O0 -g, pero todavía no hay información sobre el rastreo hacia atrás):
Cannot access memory at address 0x2aab1004
(gdb) bt
#0 0x2ab05d18 in ??()
warning: GDB can't find the start of the function at 0x2ab05d18.
GDB is unable to find the start of the function at 0x2ab05d18
and thus can't determine the size of that function's stack frame.
This means that GDB may be unable to access that stack frame, or
the frames below it.
This problem is most likely caused by an invalid program counter or
stack pointer.
However, if you think GDB should simply search farther back
from 0x2ab05d18 for code which looks like the beginning of a
function, you can increase the range of the search using the `set
heuristic-fence-post' command.
Otro desafortunado -ity es que no podemos ejecutar gdb/gdbserver. gdb/gdbserver sigue rompiendo __nptl_create_event. Al ver que la prueba crea subprocesos, temporizadores y destruye, cada 5 segundos es casi imposible sentarse durante mucho tiempo y continuar golpeándolos.
EDIT: Otra nota, backtrace y backtrace_symbols no son compatibles con nuestra cadena de herramientas.
Por lo tanto:
¿Hay una manera de atrapar culpa seg y generar más datos backtrace, punteros de pila, pila de llamadas, etc.?
¿Hay alguna manera de obtener más datos de un volcado del núcleo que se colgó en un archivo .so?
Thanks.
¿Podría intentar manejar 'SIGSEGV' si eso es posible? Nunca es recomendable, pero creo que podría ayudarte en esta situación. – Stark07