查看 stdin 的内容

Joh*_*ton 7 debugging proc stdin

我正在尝试调试一个可以通过标准输入接收命令的 Linux 应用程序,能够看到写入标准输入的所有内容将非常有用。

我的第一种方法是 execute sudo cat /proc/$pid/fd/0,但事实证明这是一种无效的方法,因为cat我和我的进程都试图使用该文件描述符的内容,并且只有一个进程可以赢得比赛。

另一种方法是使用tail,但由于此处概述的原因,这将不起作用。

我可以轻松地将调试日志添加到我的应用程序中,这将解决问题,但我很想知道是否有我缺少的更通用的方法。

ste*_*eve 3

strace

下面的例子。启动一个 cat 进程,该进程读取 stdin 并写入 /tmp/foofile。找到 pid,跟踪它。在原来的猫窗口中,输入一些文本,嘿,快点。

# cat >/tmp/foofile


# ps -ef|grep cat
steve     2134  1801  0 22:25 pts/2    00:00:00 cat
# strace -fp 2134
Process 2134 attached
read(0, "test\n", 65536)                = 5
write(1, "test\n", 5)                   = 5
read(0,
Run Code Online (Sandbox Code Playgroud)

要从文件描述符 0 中取出读取内容:

strace -fp 2134 -e trace=read -o "|grep read.0,"
Run Code Online (Sandbox Code Playgroud)