您可能会将问题视为重复,但请阅读直到最后。
我在嵌入式Linux上运行了一个应用程序,我希望从应用程序中捕获所有日志。我尝试使用with文件描述符为1表示stdout,2表示stderr。我能够捕获stderr日志。我想使用 printf 语句捕获日志。该应用程序已经构建,因此我无法更改它。它是嵌入式Linux,因此它没有脚本实用程序。 我的应用程序有 printf 日志。我想要的只是使用shell命令捕获它们(如果有的话)。 我试过下面的命令
./application 2>&1 | tee file.txt
./application >cmd.log 2>&1
./application | tee log.txt
使用这些命令,我能够捕获错误消息,但不能捕获printf消息
请帮忙。
答案 0 :(得分:1)
你的前两个命令行应该实际捕获所有发送的内容(通过printf
,puts
,无论如何)到stdin
和stderr
(最后一个命令行错过了后者)。
如果仍有消息打印到控制台或tty,则应用程序会重定向(例如,使用dup2
)stderr
和/或stdout
到某个其他设备,或者它没有根本不会将其输出发送到这两个文件(例如, glibc ,在某些错误情况下会直接写入控制台设备)。
在不知道输出实际发送到何处的情况下,无法捕获它。可以使用strace
应用程序来找出这些字符串的发送位置。