subaru - ¿Cómo puedo hacer que GDB me diga qué dirección causó una segfault?
gdb windows (2)
Ejecute su programa bajo GDB. Cuando ocurre la segfault, GDB le informará la línea y la declaración de su programa, junto con la variable y su dirección asociada.
Puede usar el comando "imprimir" (p) en GDB para inspeccionar las variables. Si el bloqueo se produjo en una llamada a la biblioteca, puede usar la serie de comandos "marco" para ver el marco de la pila en cuestión.
Me gustaría saber si mi programa está accediendo a punteros NULL o memoria obsoleta.
La traza inversa se ve así:
Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x2b0fa4c8 (LWP 1333)] 0x299a6ad4 in pthread_mutex_lock () from /lib/libpthread.so.0 (gdb) bt #0 0x299a6ad4 in pthread_mutex_lock () from /lib/libpthread.so.0 #1 0x0058e900 in ?? ()
Con GDB 7 y superior, puede examinar la estructura $_siginfo
que se completa cuando se produce la señal y determinar la dirección de falla:
(gdb) p $_siginfo._sifields._sigfault.si_addr
Si muestra (void *) 0x0
(o un número pequeño), entonces tiene una referencia de puntero NULL.