2011-01-06 60 views
11

我正在調試C程序(我沒寫)。我啓用了所有內部調試工具(一大堆printf),並且我編寫了一個使用proc_open()的小型PHP腳本,它只抓取stdout和stderr,並將它們在一個文件中進行時間匹配。glibc backtrace - 無法將輸出重定向到文件

目前,二進制是與同時由glibc的抓住了realloc()的錯誤dieing,並且打印glibc的回溯,開頭:

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

這裏是我不明白的事:我已經確認PHP腳本正在從二進制文件的進程中捕獲標準輸出和標準錯誤,並將它們寫入正確的文件,但是這個回溯仍然被打印到控制檯。這是從哪裏來的?除stdout和stderr之外是否有一些神奇的輸出通道?

關於如何將這個回溯記錄到文件或者用stderr發送出去的想法?

感謝, 傑森

回答

11

對不起......我問了大約一半的谷歌搜索小時後,卻多了幾分調查後,我發現了一個解決方案...在Fedora的郵件列表後(http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html )處理該曲這個問題建立系統...

export LIBC_FATAL_STDERR_=1 

顯然默認情況下,錯誤報告向右走爲/ dev/tty的出於某種原因...

+0

唉。到處都是破損。 – Griwes 2014-08-21 09:53:29

0

郵件列表傑森還引用建議s青梅更重型的解決方案,具體如下:

恕我直言曲(和模擬爲此事)應該是運行中的 建立一個俘虜PTY其輸出它記錄無論如何,即使他們重定向 一切。你永遠不知道一些軟件包會嘗試什麼瘋狂的廢話。 (羅蘭·麥格拉斯,http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html

職位如下建議使用pty Python包來實現這一目標。