tutorial subaru onlinegdb online español compiler commands c gdb

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.