Общий вывод библиотек в отдельный файл журнала: shared-lib.log.
Если у вас есть источники для этой библиотеки, вы можете изменить его, чтобы не сделать это. Если вы этого не сделаете, вы должны сообщить своим разработчикам, что вы не оценили их выбор в журнале (это нормально, чтобы предоставить способ перенаправления выходных файлов библиотеки, но не стоит настаивать на этом, не позволяя вам самим решать).
Я хотел бы перенаправить вывод lib в gdb.
Предположительно, вы хотите перенаправить этот вывод на тот же терминал, на котором работает GDB, чтобы вы могли видеть, как выглядит выход библиотеки, когда вы проходите через вашу программу.
Вы могли бы попробовать это в качестве первого шага:
rm -f shared-lib.log && ln -s /dev/tty shared-lib.log
Если библиотека просто делает open("shared-lib.log", O_WRONLY|O_CREAT, ...)
то, что должно быть достаточно. Но это не сработает, если библиотека сначала выполнит unlink("shared-lib.log")
.
В этом случае не все потеряно, но становится все труднее. Вы хотели бы узнать, какой файловый дескриптор записывает библиотека (на Linux, ls -l /proc/<pid-of-inferior>/fd
вам следует рассказать). Вы также хотели бы организовать открытый fd2
, идущий к /dev/tty
. Наконец, вы хотите вызвать dup2($fd, $fd2)
, чтобы перенаправить вывод библиотеки на терминал. Вам также может понадобиться fflush(NULL)
в вашей программе, иначе библиотека может полностью буферировать свой отладочный вывод (так как он считает, что его вывод идет в файл, а stdio полностью заполняет такой вывод по умолчанию).
Что означает «перенаправить вывод lib в gdb»? Вы хотите использовать его в качестве ввода командной строки gdb? Вы пробовали делать «shared-lib.log» fifo, а затем читать с fifo с помощью какого-то другого инструмента, такого как 'cat',' tee' или даже перенаправления оболочки? – Paulo1205