共享庫輸出到一個單獨的日誌文件: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