使用 strace,如何使用它来获取网络和串行调用

使用 strace,如何使用它来获取网络和串行调用

我有一个在后台运行的 python 程序,为了进行调试我需要知道的是,我需要查看它对串行、网络和标准输出发送和接收的调用。

我知道如果我想查看 stdout,我需要“-e write”参数,但其他的呢?我需要它通过一个命令输出所有 3 个参数,因为它将成为我正在制作的控制台应用程序的一部分。

答案1

一般来说,您首先会strace在没有它的情况下运行-e(最终在具有类似操作的更小/更轻的程序上运行)并将 stderr 重定向到文件,然后查看文件内部以选择-e所需的最少选项集。

对于您的特殊情况,我在调用中运行它wget(仅寻找网络内容),并且我确定这些选项会很有用:(如果您对接收端不感兴趣,-e socket,connect,close,write,read请删除)。read

使用这些选项strace可以显示类似这样的网络调用:

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("74.125.202.121")}, 16) = 0
write(4, "\26\3\1\0\302\1\0\0\276\3\1\374\2\223/\332\3545\34\2628u3-3hT\25s\"\310\215"..., 199) = 199
read(4, "\26\3\1\0]", 5)                = 5
read(4, "\2\0\0Y\3\1U\251X\245#\313\3544a\17\372\276\340^%\177y\270asQ\255^\7B\212"..., 93) = 93
...
close(4)                                = 0

相关内容