linux - strace -e trace=network 只显示 SIGCHLD?

标签 linux sockets debugging strace

我正在使用命令:

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() 等的套接字调用吗?

最佳答案

将 strace 与 gdb --args ${EXECUTABLE} 一起使用会打印 gdb 的系统调用,而不是 gdb 下运行的可执行文件的系统调用。

为了打印您的可执行文件的系统调用,您可以使用:

strace -f -tt -o ${filename} -e trace=network ${EXECUTABLE} 

'-f' 选项要求 strace 跟随 fork ,这在可执行 fork 新线程或新进程时很有用。

关于linux - strace -e trace=network 只显示 SIGCHLD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38377246/

相关文章:

c - 带有链接器选项 e 的 gcc 出现段错误

c - fork 的子进程是否使用相同的信号量?

在 Linux 上,同一进程的线程之间的上下文切换成本

c - 从可利用程序运行时出现 Shellcode Segmentation Fault 错误

ios - 使用 NSOutputstream 和 NSInputstream 写入和读取每个间隔

java劫持套接字可能吗?

c++ - 在 C/C++ 中使用异步套接字时检测远程断开(半关闭)

android - ADB 未检测到 ZTE V9

c# - Visual Studio : executing clean up code when debugging stops

c# - 可以访问属性的子 "DebuggerDisplay"属性吗?