glibc backtrace - 无法将输出重定向到文件

时间:2011-01-06 14:38:40

标签: debugging glibc

我正在调试一个C程序(我没写过)。我启用了所有内部调试工具(一大堆printf),我编写了一个使用proc_open()的小PHP脚本,只抓取stdout和stderr,并将它们在一个文件中进行时间坐标。

目前,二进制文件正在死于一个由glibc捕获的realloc()错误,并且打印了一个glibc backtrace,从以下开始:

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

这是我不明白的事情:我已经确认PHP脚本正在从二进制文件的进程中捕获stdout和stderr并将它们写入正确的文件,但是这个回溯仍然打印到控制台。这是从哪里来的?除了stdout和stderr之外还有一些神奇的输出通道吗?

关于如何将此回溯捕获到文件或使用stderr发送出去的任何想法?

谢谢, 杰森

2 个答案:

答案 0 :(得分:13)

对不起......我在大约半小时的谷歌搜索后问了这个问题,但经过一番调查后,我找到了一个解决方案...在Fedora邮件列表帖子(http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html)处理这个问题在Koji构建系统......

export LIBC_FATAL_STDERR_=1

显然,默认情况下,错误报告由于某种原因直接转到/ dev / tty ...

答案 1 :(得分:0)

Jason引用的邮件列表也提出了一些更重要的解决方案,如下所示:

  

IMHO koji(并且就此问题而言)应该在内部运行构建   一个俘虏pty,无论如何都会记录其输出,即使它们重定向   一切。你永远不会知道一些包将要尝试的疯狂废话。 (Roland McGrath,http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html

以下帖子建议使用pty python包来完成此任务。