2011-01-06 17 views
11

Estoy en el proceso de depurar un programa en C (que no escribí). Tengo habilitadas todas las herramientas internas de depuración (un montón de printf), y escribí un pequeño script PHP que usa proc_open() y simplemente toma stdout y stderr, y las coordina en un solo archivo.glibc backtrace - no se puede redirigir la salida al archivo

Por el momento, el binario está muriendo con un error de realloc() que está atrapado por glibc, y se imprime una traza glibc, comenzando con:

*** glibc detected *** /sbin/rsyslogd: realloc(): invalid next size: 0x00002ace626ac910 *** 

Aquí es lo que no entiendo: yo He confirmado que el script PHP está capturando tanto stdout como stderr del proceso del binario y escribiéndolos en los archivos correctos, pero esta traza inversa aún se imprime en la consola. ¿De dónde viene esto? ¿Hay algún canal de salida mágico aparte de stdout y stderr?

¿Alguna idea sobre cómo capturar esta traza inversa en un archivo o enviarla con stderr?

Gracias, Jason

Respuesta

11

Lo siento ... me hicieron la pregunta después de una media hora de google, pero después de un poco más de investigación, he encontrado una solución ... en una lista de correo de post Fedora (http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html) frente a este problema en el sistema de Koji construir ...

export LIBC_FATAL_STDERR_=1 

parecer de forma predeterminada los informes de error de ir a la derecha a/dev/tty por alguna razón ...

+0

Oh bien. Tanto rompimiento en todas partes. – Griwes

0

la lista de correo que Jason también referencias sugiere s ome más soluciones de alta resistencia, de la siguiente manera:

mi humilde opinión koji (y maqueta para el caso) debe estar en funcionamiento dentro de las compilaciones un Pty cautivo cuya salida se registra todos modos, incluso si se redirigen todo. Nunca se sabe qué tonterías locas probará algún paquete. (Roland McGrath, http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html)

mensajes Siguiendo sugieren utilizando el paquete pty pitón para lograr esto.

Cuestiones relacionadas