共享库输出到一个单独的日志文件: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',甚至shell的重定向? – Paulo1205