Linux命令-strace
strace 是一个用于跟踪系统调用和信号的工具,可以帮助分析程序的行为和问题。以下是 strace 命令的完整内容和详细说明:
功能说明
strace 命令可以用来跟踪系统调用和信号传递,帮助诊断和调试应用程序。通过捕获和解析系统调用信息,strace 提供了对程序运行时行为的深入了解。
参数列表
以下是 strace 命令的完整参数列表及其功能说明:
-i 输出系统调用的入口指针。
-q 禁止输出关于脱离的消息。
-r 打印出相对时间关于每个系统调用。
-t 在输出中的每一行前加上时间信息。
-tt 在输出中的每一行前加上时间信息,精确到微秒级。
-ttt 微秒级输出,以秒为单位表示时间。
-T 显示每个系统调用所耗费的时间。
-v 输出所有的系统调用。一些默认不输出的调用(如环境变量、状态、输入输出等)会被输出。
-V 输出 strace 的版本信息。
-x 以十六进制形式输出非标准字符串。
-xx 所有字符串以十六进制形式输出。
-a column 设置返回值的输出位置。默认为 40。
-e expr 指定一个表达式,用来控制如何跟踪。格式如下:[qualifier=][!]value1[,value2]…。qualifier 可以是 trace、abbrev、verbose、raw、signal、read、write 之一。默认为 trace。感叹号表示否定。例如:-e trace=open 表示只跟踪 open 调用。-e trace=!open 表示跟踪除了 open 以外的其他调用。
-o filename 将 strace 的输出写入文件 filename。
-p pid 跟踪指定的进程 pid。要同时跟踪多个进程,重复多次 -p 选项即可。
-s strsize 指定输出的字符串的最大长度。默认为 32。文件名始终全部输出。
-u username 以 username 的 UID 和 GID 执行被跟踪的命令。
常用示例
跟踪指定命令的系统调用
strace -o trace.log ls -l
这将跟踪 ls -l 命令的系统调用,并将输出保存到 trace.log 文件中。
跟踪指定进程的系统调用
strace -p 1234
这将跟踪进程 ID 为 1234 的进程的系统调用。
跟踪所有文件相关的系统调用
strace -e trace=file ls -l /etc
这将只跟踪与文件操作相关的系统调用,如 open、close、read、write 等。
记录系统调用的统计信息
strace -c -o stats.log ls -l
这将记录 ls -l 命令的系统调用统计信息,并将输出保存到 stats.log 文件中。
跟踪网络相关的系统调用
strace -e trace=network telnet example.com 80
这将只跟踪与网络相关的系统调用,如 socket、connect、sendto、recvfrom 等。