2011-01-06 9 views
11

Ich bin dabei, ein C-Programm zu debuggen (das ich nicht geschrieben habe). Ich habe alle internen Debugging-Tools (eine ganze Reihe von printf) aktiviert, und ich schrieb ein kleines PHP-Skript, das proc_open() verwendet und einfach sowohl stdout und stderr ergreift, und zeit-koordiniert sie in einer Datei.Glibc Backtrace - kann Ausgabe in Datei nicht umleiten

Im Moment wird das binäre mit realloc() Fehler dieing, die von glibc gefangen wird, und ein glibc Backtrace gedruckt wird, beginnend mit:

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

Hier ist das, was ich nicht verstehe: Ich habe bestätigt, dass das PHP-Skript sowohl stdout als auch stderr aus dem Binärprozess abfängt und sie in die richtigen Dateien schreibt, aber dieses Backtrace wird immer noch auf die Konsole gedruckt. Woher kommt das? Gibt es einen anderen magischen Ausgabekanal als stdout und stderr?

Haben Sie Ideen, wie ich dieses Backtrace in eine Datei aufnehmen oder mit stderr verschicken kann?

Danke, Jason

Antwort

11

Sorry ... Ich stellte die Frage nach etwa einer halben Stunde googeln, aber nach einer wenig mehr Untersuchung, fand ich eine Lösung ... in einer Mailing-Liste Post Fedora (http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html) mit diesem Problem in den Koji Umgang Build-System ...

export LIBC_FATAL_STDERR_=1 

Anscheinend standardmäßig auch die Fehlermeldungen gehen Sie nach rechts auf/dev/tty aus irgendeinem Grunde ...

+0

Oh gut. So viel Bruch überall. – Griwes

0

die Mailingliste, dass Jason Referenzen schlägt s vor ome mehr schwere Lösungen wie folgt:

IMHO Koji (und Mock für diese Angelegenheit) sollte die Builds innerhalb eine unverlierbare pty, dessen Ausgang zu laufen meldet es sich trotzdem, auch wenn sie alles umleiten. Du weißt nie, was für ein verrückter Unsinn irgendein Paket versuchen wird. (Roland McGrath, http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html)

Folgende Beiträge schlagen die pty Python-Paket verwenden, dies zu erreichen.

Verwandte Themen