2011-01-06 12 views
11

Sono in fase di debug di un programma C (che non ho scritto). Ho tutti gli strumenti di debug interni (un sacco di stampanti) abilitati, e ho scritto un piccolo script PHP che usa proc_open() e afferra sia lo stdout che lo stderr e li coordina in un unico file.glibc backtrace - impossibile reindirizzare l'output sul file

Al momento, il binario sta morendo con un errore realloc() che viene catturato da glibc, e un backtrace glibc viene stampato, a cominciare da:

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

Ecco la cosa che non capisco: io Ho confermato che lo script PHP sta catturando sia stdout che stderr dal processo del binario e li scrive nei file corretti, ma questo backtrace è ancora stampato sulla console. Da dove viene questo? Esiste un magico canale di output diverso da stdout e stderr?

Qualche idea su come faccio a catturare questo backtrace su un file o inviarlo con stderr?

Grazie, Jason

risposta

11

dispiace ... ho fatto la domanda, dopo circa mezz'ora di googling, ma dopo un po 'di più indagini, ho trovato una soluzione ... in una mailing list di Fedora postale (http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html) si occupano di questo problema nel Koji costruire sistema di ...

export LIBC_FATAL_STDERR_=1 

a quanto pare per default le segnalazioni di errori andare a destra a/dev/tty per qualche motivo ...

+0

Oh bene. Così tante rotture ovunque. – Griwes

0

la mailing list che i riferimenti Jason anche suggerisce s ome soluzioni più pesanti, come segue:

IMHO koji (e finto per questo) dovrebbe essere in esecuzione le generazioni all'interno un PTY prigioniero la cui uscita viene registrato comunque, anche se reindirizzare tutto. Non sai mai quale pazza assurdità proverà in qualche pacchetto. (Roland McGrath, http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html)

seguenti posti suggerire utilizzando il pacchetto python pty per raggiungere questo obiettivo.