【问题标题】:strace -e trace=network only showing SIGCHLD?strace -e trace=network 只显示 SIGCHLD?
【发布时间】: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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-03-01
    • 2010-12-18
    • 2016-06-09
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2022-08-05
    相关资源
    最近更新 更多