我正在尝试使用strace
来监听Unix域套接字。
我运行的进程具有多个文件描述符,某些文件描述符将调用recvmsg
系统调用。但是我只想嗅探特定的文件描述符(如1)并在下面运行命令:
strace -e trace=recvmsg -p 27366 -e recvmsg=1
但是strace
显示了此错误。我该如何解决这个问题?
strace: invalid system call 'recvmsg=1'
我正在尝试使用strace
来监听Unix域套接字。
我运行的进程具有多个文件描述符,某些文件描述符将调用recvmsg
系统调用。但是我只想嗅探特定的文件描述符(如1)并在下面运行命令:
strace -e trace=recvmsg -p 27366 -e recvmsg=1
但是strace
显示了此错误。我该如何解决这个问题?
strace: invalid system call 'recvmsg=1'
使用-e read=fd
代替-e recvmsg=fd
。
recvmsg
是read
的一种。
示例:
$ 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 +++