【嵌入式开发 Linux 常用命令系列 10 -- linux 必用 跟踪系统调用和信号 命令 strace 详细介绍 】


上篇文章:嵌入式开发 Linux 常用命令系列 9 – linux df,du, dd 命令的详细介绍
下篇文章:嵌入式开发 Linux 常用命令系列 11 – linux 下 任务与CPU绑定命令 taskset 详细介绍

strace 介绍

strace是一种在Linux环境下帮助程序员诊断、调试和理解程序运行的工具。通过追踪程序执行过程中的系统调用和信号传递,strace提供了一个"在运行时查看"程序的方式。

基本使用方法如下:

strace [选项] 命令

常用选项包括:

  • -c : 统计每一系统调用的所执行的时间,次数和出错的次数等;
  • -d : 输出strace关于标准错误的调试信息;
  • -f : 跟踪由fork调用所产生的子进程;
  • -ff : 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号;
  • -F : 尝试跟踪vfork调用。在-f时,vfork调用有些特殊;
  • -i : 输出指令指针;
  • -q : 降低strace的输出量;
  • -r : 打印出相对时间关联;
  • -t : 在输出中的每一行前加上时间信息;
  • -tt : 在输出中的每一行前加上时间信息,微秒级;
  • -ttt : 微秒级输出,以秒了输出时间;
  • -T : 输出每一调用所耗的时间;
  • -v : 输出所有的环境变量。

使用示例

以下是一些使用strace命令的示例:

基本使用

strace ls

这条命令会输出你在运行ls命令时发生的所有系统调用。

跟踪特定的系统调用

strace -e open ls

这条命令只会输出与open系统调用相关的信息。

跟踪子进程的系统调用

strace -f -e trace=fork,execve ls

这条命令会输出与forkexecve系统调用相关的信息,并且会跟踪子进程的系统调用。

将输出写入文件

strace -o output.txt ls

这条命令将strace的输出写入output.txt文件。

显示系统调用的统计信息

strace -c ls

这条命令在程序退出时显示系统调用的统计信息,如总调用次数,错误次数,以及每个系统调用所花费的时间。

这些只是一些基本的示例。strace命令有许多选项和用法可以帮助你更深入地理解和调试程序的行为。

更多使用方法见

strace -h
Usage: strace [-ACdffhikqqrtttTvVwxxyyzZ] [-I N] [-b execve] [-e EXPR]...
              [-a COLUMN] [-o FILE] [-s STRSIZE] [-X FORMAT] [-O OVERHEAD]
              [-S SORTBY] [-P PATH]... [-p PID]... [-U COLUMNS] [--seccomp-bpf]
              { -p PID | [-DDD] [-E VAR=VAL]... [-u USERNAME] PROG [ARGS] }
   or: strace -c[dfwzZ] [-I N] [-b execve] [-e EXPR]... [-O OVERHEAD]
              [-S SORTBY] [-P PATH]... [-p PID]... [-U COLUMNS] [--seccomp-bpf]
              { -p PID | [-DDD] [-E VAR=VAL]... [-u USERNAME] PROG [ARGS] }

General:
  -e EXPR        a qualifying expression: OPTION=[!]all or OPTION=[!]VAL1[,VAL2]...
     options:    trace, abbrev, verbose, raw, signal, read, write, fault,
                 inject, status, quiet, kvm, decode-fds

Startup:
  -E VAR=VAL, --env=VAR=VAL
                 put VAR=VAL in the environment for command
  -E VAR, --env=VAR
                 remove VAR from the environment for command
  -p PID, --attach=PID
                 trace process with process id PID, may be repeated
  -u USERNAME, --user=USERNAME
                 run command as USERNAME handling setuid and/or setgid

Tracing:
  -b execve, --detach-on=execve
                 detach on execve syscall
  -D, --daemonize[=grandchild]
                 run tracer process as a grandchild, not as a parent
  -DD, --daemonize=pgroup
                 run tracer process in a separate process group
  -DDD, --daemonize=session
                 run tracer process in a separate session
  -f, --follow-forks
                 follow forks
  -ff, --follow-forks --output-separately
                 follow forks with output into separate files
  -I INTERRUPTIBLE, --interruptible=INTERRUPTIBLE
     1, anywhere:   no signals are blocked
     2, waiting:    fatal signals are blocked while decoding syscall (default)
     3, never:      fatal signals are always blocked (default if '-o FILE PROG')
     4, never_tstp: fatal signals and SIGTSTP (^Z) are always blocked
                    (useful to make 'strace -o FILE PROG' not stop on ^Z)

上篇文章:嵌入式开发 Linux 常用命令系列 9 – linux df,du, dd 命令的详细介绍
下篇文章:嵌入式开发 Linux 常用命令系列 11 – linux 下 任务与CPU绑定命令 taskset 详细介绍

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公CodingCos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值