简介

  • strace命令相关笔记

linux strace命令是什么

strace 是 Linux 下的一个用于诊断和调试程序的命令,它可以跟踪系统调用和接收的信号。strace 工具允许你查看一个进程执行期间所有的系统调用和它们的返回值,这对理解程序的行为和调试问题非常有帮助。

以下是 strace 的一些常见用法:

  1. 跟踪一个程序的系统调用
    1
    
    strace -o output.txt program_name
    

    这会启动 program_name 并将所有的系统调用记录到 output.txt 文件中。

  2. 跟踪一个已经在运行的进程
    1
    
    strace -p pid
    

    其中 pid 是进程的 ID。这会附加到已经运行的进程并开始跟踪它的系统调用。

  3. 只跟踪特定类型的系统调用
    1
    
    strace -e trace=open,read,write program_name
    

    这将只跟踪 openreadwrite 系统调用。

  4. 打印每个系统调用所花费的时间
    1
    
    strace -T program_name
    
  5. 跟踪系统调用和信号
    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

这将只跟踪 openreadwrite 系统调用。

跟踪所有文件相关的系统调用

1
strace -e trace=file program_name

这会跟踪所有与文件操作相关的系统调用,例如 openreadwrite 等。

跟踪所有网络相关的系统调用

1
strace -e trace=network program_name

这会跟踪所有与网络操作相关的系统调用,例如 socketconnectsendrecv 等。

输出格式

打印每个系统调用所花费的时间

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
2
3
4
5
execve("/bin/ls", ["ls"], 0x7ffccf5a8c38 /* 20 vars */) = 0
brk(NULL)                               = 0x56325f1ff000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbb6141f000
...

跟踪一个已经运行的进程

假设进程 ID 为 1234:

1
strace -p 1234

只跟踪 openread 系统调用

1
strace -e trace=open,read ls

常见系统调用解释

  • execve: 执行程序。
  • open: 打开文件。
  • read: 读取文件。
  • write: 写入文件。
  • close: 关闭文件描述符。
  • brk: 调整数据段末尾位置,用于内存分配。
  • mmap: 内存映射,用于文件或设备的内存访问。

strace 是一个非常强大的工具,特别是在调试程序、分析系统性能和排查系统问题时非常有用。它的输出可以帮助开发者理解程序的行为,找出问题的根源并进行优化。