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
这条命令会输出与fork
和execve
系统调用相关的信息,并且会跟踪子进程的系统调用。
将输出写入文件:
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 详细介绍