如何使用特定的文件描述符运行strace?

我正在尝试使用strace来监听Unix域套接字。

我运行的进程具有多个文件描述符,某些文件描述符将调用recvmsg系统调用。但是我只想嗅探特定的文件描述符(如1)并在下面运行命令:

strace -e trace=recvmsg -p 27366 -e recvmsg=1

但是strace显示了此错误。我该如何解决这个问题?

strace: invalid system call 'recvmsg=1'
lm1160 回答:如何使用特定的文件描述符运行strace?

使用-e read=fd代替-e recvmsg=fd

recvmsgread的一种。

示例:

$ cat foo.c
#include <sys/socket.h>
#include <unistd.h>
#include <err.h>
int main(void){
        char buf[512]; int fd[2];
        struct iovec iov = { buf,sizeof buf };
        struct msghdr msg = { .msg_iov = &iov,.msg_iovlen = 1 };
        if(socketpair(AF_UNIX,SOCK_DGRAM,fd)) err(1,"socketpair");
        write(fd[0],"foo\n",4);
        recvmsg(fd[1],&msg,0);
}
$ cc -s -Wall foo.c -o foo
$ strace -e trace=recvmsg -e read=all ./foo
recvmsg(4,{msg_name=NULL,msg_namelen=0,msg_iov=[{iov_base="foo\n",iov_len=512}],msg_iovlen=1,msg_controllen=0,msg_flags=0},0) = 4
 * 4 bytes in buffer 0
 | 00000  66 6f 6f 0a                                       foo.             |
+++ exited with 0 +++
本文链接:https://www.f2er.com/2851410.html

大家都在问