简介
- strace命令相关笔记
linux strace命令是什么
strace
是 Linux 下的一个用于诊断和调试程序的命令,它可以跟踪系统调用和接收的信号。strace
工具允许你查看一个进程执行期间所有的系统调用和它们的返回值,这对理解程序的行为和调试问题非常有帮助。
以下是 strace
的一些常见用法:
跟踪一个程序的系统调用:
1
strace -o output.txt program_name
这会启动
program_name
并将所有的系统调用记录到output.txt
文件中。跟踪一个已经在运行的进程:
1
strace -p pid
其中
pid
是进程的 ID。这会附加到已经运行的进程并开始跟踪它的系统调用。只跟踪特定类型的系统调用:
1
strace -e trace=open,read,write program_name
这将只跟踪
open
、read
和write
系统调用。打印每个系统调用所花费的时间:
1
strace -T program_name
跟踪系统调用和信号:
1
strace -c program_name
这会总结系统调用的次数、出错次数和执行时间。
示例:使用 strace
跟踪 ls
命令的系统调用:
1 | strace ls |
这个命令会在终端中打印出 ls
命令执行期间所有的系统调用和它们的返回值。
strace
是一个非常强大的工具,特别是在调试程序、分析系统性能和排查系统问题时非常有用。
linux strace命令 详解
strace
是一个强大的 Linux 工具,用于诊断和调试程序。它能够跟踪系统调用(syscalls)和信号(signals),从而帮助用户了解程序的行为、查找问题根源、调试错误等。以下是 strace
的详细使用说明和示例。
基本用法
跟踪一个程序的系统调用
1 | strace program_name |
这会启动 program_name
并在终端上显示其所有系统调用。
将输出重定向到文件
1 | strace -o output.txt program_name |
将系统调用输出记录到 output.txt
文件中。
跟踪已经运行的进程
1 | strace -p pid |
其中 pid
是进程的 ID。这会附加到已经运行的进程并开始跟踪它的系统调用。
过滤系统调用
只跟踪特定类型的系统调用
1 | strace -e trace=open,read,write program_name |
这将只跟踪 open
、read
和 write
系统调用。
跟踪所有文件相关的系统调用
1 | strace -e trace=file program_name |
这会跟踪所有与文件操作相关的系统调用,例如 open
、read
、write
等。
跟踪所有网络相关的系统调用
1 | strace -e trace=network program_name |
这会跟踪所有与网络操作相关的系统调用,例如 socket
、connect
、send
、recv
等。
输出格式
打印每个系统调用所花费的时间
1 | strace -T program_name |
在输出中包含每个系统调用所花费的时间。
打印时间戳
1 | strace -t program_name |
在每个系统调用前面加上时间戳。
显示相对时间戳
1 | strace -r program_name |
在每个系统调用前面显示相对于前一个系统调用的时间间隔。
统计信息
汇总系统调用的次数、出错次数和执行时间
1 | strace -c program_name |
程序执行完毕后,输出汇总统计信息。
示例
跟踪 ls
命令的系统调用
1 | strace ls |
输出示例:
1 | execve("/bin/ls", ["ls"], 0x7ffccf5a8c38 /* 20 vars */) = 0 |
跟踪一个已经运行的进程
假设进程 ID 为 1234:
1 | strace -p 1234 |
只跟踪 open
和 read
系统调用
1 | strace -e trace=open,read ls |
常见系统调用解释
execve
: 执行程序。open
: 打开文件。read
: 读取文件。write
: 写入文件。close
: 关闭文件描述符。brk
: 调整数据段末尾位置,用于内存分配。mmap
: 内存映射,用于文件或设备的内存访问。
strace
是一个非常强大的工具,特别是在调试程序、分析系统性能和排查系统问题时非常有用。它的输出可以帮助开发者理解程序的行为,找出问题的根源并进行优化。