Incluso si el programa atrapa SIGSEGV, gdb aún debe obtenerlo primero y darle la oportunidad de depurar el programa. ¿Has hecho algo como
handle SIGSEGV nostop
en GDB? Si es así, eso podría ser por qué no se detiene.
¿Está seguro de que realmente se está produciendo un segfault? ¿Puedes duplicar este comportamiento con otro programa o intencionalmente causando una violación de segmentación?
Por ejemplo:
$ cat sig.c
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void handle(int n)
{
puts("Bail");
exit(1);
}
int main()
{
signal(SIGSEGV, handle);
int *pi = 0;
*pi = 10;
return 0;
}
$ gcc -g sig.c
$ ./a.out
Bail
$ gdb ./a.out
GNU gdb 6.6-debian
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) run
Starting program: /home/elcapaldo/a.out
Program received signal SIGSEGV, Segmentation fault.
0x08048421 in main() at sig.c:15
15 *pi = 10;
(gdb) where
#0 0x08048421 in main() at sig.c:15
(gdb) c
Continuing.
Bail
Program exited with code 01.
(gdb) q
Estás en lo correcto. Ciertamente, debería detectar el error del proceso secundario. Gracias. – Blad
Lo intenté de acuerdo con su sugerencia, pero otro problema hizo abortar la aplicación: "shell-init: error al recuperar el directorio actual: getcwd: no puede acceder a los directorios principales: no existe dicho archivo o directorio". ¿Alguna idea? – Blad