establecer un punto de interrupción de salida gdb no funciona?

He establecido puntos de interrupción en exit y _exit, y mi programa (aplicación de multiproceso, que se ejecuta en Linux 2.6.16.46-0.12 sles10), de alguna manera todavía está saliendo de una manera que no puedo localizar

(gdb) c
...
[New Thread 47513671297344 (LWP 15279)]
[New Thread 47513667103040 (LWP 15280)]
[New Thread 47513662908736 (LWP 15281)]

Program exited with code 0177.
(gdb)

las funciones de salida residen en libc, por lo que no hay problemas con la biblioteca compartida de carga diferida. ¿Alguien sabe de algún otro disparador misterioso para la salida que no pueda ser atrapado?

EDITAR: el problema ahora es solo académico. Intenté la depuración de búsqueda binaria, desechando un subconjunto de mis cambios (el problema desapareció). Después de aplicarlos nuevamente en secuencia, ya no puedo repetir el problema, incluso con las cosas restauradas al estado original.

EDIT2: encontré una razón para este tipo de error recientemente, que puede haber sido la fuente original para este problema. Por razones históricas, nuestro producto utiliza la bandera del enlazador malvado -Bsymbolic. Entre los efectos secundarios de esto está que cuando un símbolo está indefinido pero se llama, el vinculador de tiempo de ejecución GLIBC bombardeará exactamente de esta manera, y lo verá en el depurador como un proceso salido con 0177. Cuando el vinculador de tiempo de ejecución se interrumpe de esta manera, Supongo que hace que syscall se _exita directamente (en lugar de utilizar la salida de la biblioteca en tiempo de ejecución de C () o _exit ()). Eso sería coherente con el hecho de que no pude detectarlo con los puntos de interrupción de salida en el depurador.

Respuestas a la pregunta(3)

Su respuesta a la pregunta