Glibc backtrace - не может перенаправлять вывод в файл
Я в процессе отладки программы C (я не писал). У меня есть все внутренние инструменты отладки (целая куча printf), и я написал небольшой PHP script, который использует proc_open() и просто захватывает как stdout, так и stderr, а также координаты времени в одном файле.
В настоящий момент двоичный файл умирает с ошибкой realloc(), которая попадает в glibc, и отображается backtrace glibc, начиная с:
*** glibc detected *** /sbin/rsyslogd: realloc(): invalid next size: 0x00002ace626ac910 ***
Здесь я не понимаю: я подтвердил, что PHP script захватывает как stdout, так и stderr из двоичного процесса и записывает их в правильные файлы, но эта обратная трассировка все еще печатается на консоли. Откуда это? Есть ли какой-то магический выходной канал, отличный от stdout и stderr?
Любые идеи о том, как я собираюсь захватить эту обратную трассировку в файл или отправить его с помощью stderr?
Спасибо,
Джейсон
Ответы
Ответ 1
Извините... Я задал вопрос примерно через полчаса по поиску в Google, но после небольшого расследования я нашел решение... в списке рассылки Fedora (http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html), рассматривая эту проблему в системе сборки Koji...
export LIBC_FATAL_STDERR_=1
По-видимому, по умолчанию отчеты об ошибках по какой-либо причине идут прямо в/dev/tty...
Ответ 2
Список рассылки, на который ссылается Джейсон, также предлагает некоторые более сложные решения:
ИМХО koji (и макет, если на то пошло) должен запускать сборки внутри пейп-пэт, выход которого он регистрирует в любом случае, даже если они перенаправляют все. Вы никогда не знаете, какую сумасшедшую чепуху какой-то пакет попытается попробовать. (Roland McGrath, http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html)
Следующие сообщения предлагают использовать пакет pty
python для выполнения этого.