【问题标题】:glibc backtrace - can't redirect output to fileglibc 回溯 - 无法将输出重定向到文件
【发布时间】:2011-06-04 16:51:59
【问题描述】:

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

目前,二进制文件因 glibc 捕获的 realloc() 错误而死,并打印 glibc 回溯,开头为:

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

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

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

谢谢, 杰森

【问题讨论】:

    标签: debugging glibc


    【解决方案1】:

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

    export LIBC_FATAL_STDERR_=1
    

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

    【讨论】:

    • 哦,好吧。到处都有这么多破损。
    【解决方案2】:

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

    恕我直言 koji(和模拟)应该在里面运行构建 一个俘虏 pty 无论如何都会记录其输出,即使他们重定向 一切。您永远不知道某些软件包会尝试什么疯狂的废话。 (罗兰·麦格拉思,http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多