обратная трассировка glibc - невозможно перенаправить вывод в файл - PullRequest
12 голосов
/ 06 января 2011

Я нахожусь в процессе отладки программы на C (которую я не писал). У меня включены все инструменты внутренней отладки (целая куча printf), и я написал небольшой PHP-скрипт, который использует proc_open () и просто захватывает и stdout, и stderr, и координирует их время в одном файле.

В настоящий момент бинарный файл умирает с ошибкой realloc (), которая перехватывается glibc, и выводится обратная трассировка glibc, начиная с:

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

Вот вещь, которую я не понимаю: я подтвердил, что PHP-скрипт захватывает и stdout, и stderr из процесса двоичного файла и записывает их в правильные файлы, но эта обратная трассировка все еще выводится на консоль. Откуда это? Есть ли какой-нибудь магический выходной канал, кроме stdout и stderr?

Есть какие-нибудь идеи о том, как мне записать эту обратную трассировку в файл или отправить ее с помощью stderr?

Спасибо, Jason

Ответы [ 2 ]

13 голосов
/ 06 января 2011

Извините ... Я задал вопрос примерно через полчаса поиска в Google, но после небольшого исследования я нашел решение ... в сообщении списка рассылки Fedora (http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html), посвященном этой проблемев системе сборки Koji ...

export LIBC_FATAL_STDERR_=1

По-видимому, по умолчанию отчеты об ошибках по какой-то причине идут прямо в / dev / tty ...

0 голосов
/ 03 ноября 2011

Список рассылки, на который ссылается Джейсон, также предлагает несколько более тяжелых решений:все равно выведите его логи, даже если они все перенаправят.Вы никогда не знаете, что за сумасшедшая чепуха собирается попробовать какой-то пакет. (Роланд МакГрат, http://www.redhat.com/archives/rhl-devel-list/2009-August/msg00982.html)

В следующих постах предлагается использовать пакет pty python для этого.

...