【发布时间】:2016-07-14 14:43:23
【问题描述】:
我正在使用命令:
strace -tt -o ${filename} -e trace=network gdb --args ${EXECUTABLE}
跟踪在连接到对等点并向对等点发送消息时发生了哪些系统调用。但是,我只收到以下条目:
15:40:11.908857 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_TRAPPED, si_pid=5019, si_status=SIGSTOP, si_utime=0, si_stime=0} ---
15:40:11.911130 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_TRAPPED, si_pid=4987, si_status=SIGTRAP, si_utime=1, si_stime=0} ---
15:40:11.914907 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=4987, si_status=0, si_utime=1779, si_stime=180} ---
15:40:11.963586 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_TRAPPED, si_pid=4983, si_status=SIGTRAP, si_utime=37, si_stime=4} ---
15:40:11.973691 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_TRAPPED, si_pid=5019, si_status=SIGSTOP, si_utime=0, si_stime=0} ---
15:40:11.975929 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_TRAPPED, si_pid=4983, si_status=SIGTRAP, si_utime=37, si_stime=4} ---
15:40:11.979922 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=4983, si_status=0, si_utime=1816, si_stime=184} ---
我应该看不到对read()close() 等的套接字调用吗?
【问题讨论】:
-
您是否尝试添加
-f以关注 fork ? -
@mpromonet 我最初没有。刚刚尝试了 strace -tt -f -o ${filename} -e trace=network gdb --args ${EXECUTABLE} 但无法创建进程:不允许操作。在启动过程中程序以代码 127 退出。
-
为什么不使用不带 gdb 的
strace -f -tt -o ${filename} -e trace=network ${EXECUTABLE}?使用您的命令,您正在记录 gdb 的系统调用。 -
@mpromonet 我最终做到了,它奏效了。我可以看到 recvfrom() 等。把它作为答案,我会接受。非常感谢。
-
Strace 和 gdb 都使用 ptrace 系统调用来完成它们的工作,而 Linux 允许一个进程一次只有一个跟踪器。
标签: linux sockets debugging strace