Linux strace命令详解

语法

strace [ -dDffhiqrtttTvVxx ] [ -a column ] [ -e expr ] ... [ -o file ] [ -p pid ] ... [ -s strsize ] [ -u username ] [ -E var=val ] ... [ -E var ] ... [ command [ arg ... ] ]
strace -c [ -D ] [ -eexpr ] ... [ -Ooverhead ] [ -Ssortby ] [ command [ arg ... ] ]

说明

在最简单的情况下,strace运行指定的命令,直到它退出。它拦截并记录进程调用的系统调用和进程接收到的信号。每个系统调用的名称、参数及其返回值都打印在标准错误或用-o选项指定的文件中。

strace是一个有用的诊断、指导和调试工具。系统管理员、诊断人员和故障排除人员将发现,它对于解决源代码不易获得的程序的问题是非常宝贵的,因为它们不需要为了跟踪而重新编译。学生、黑客和过于好奇的人会发现,通过追踪甚至是普通的程序,可以了解到很多关于系统及其系统调用的信息。程序员会发现,由于系统调用和信号都是发生在用户/内核界面上的事件,因此仔细检查这个边界对于错误隔离、健全性检查和试图捕获竞争条件非常有用。

跟踪中的每一行都包含系统调用名,以及包含在括号中的参数及其返回值。对命令cat /dev/null进行扫描的示例如下:

open("/dev/null", O_RDONLY) = 3

错误(通常返回值为-1)附加了errno符号和错误字符串:

open("/foo/bar", O_RDONLY) = -1 ENOENT (No such file or directory)

信号被打印成信号符号和信号串。“sleep 666”命令的扫描和中断摘录如下:

sigsuspend([] <unfinished ...>
--- SIGINT (Interrupt) ---
+++ killed by SIGINT +++

如果一个系统调用正在执行,而另一个系统调用正在从不同的线程/进程调用,那么strace将尝试保持这些事件的顺序,并将正在进行的调用标记为未完成。当呼叫返回时,它将被标记为已恢复:

[pid 28772] select(4, [3], NULL, NULL, NULL <unfinished ...>
[pid 28779] clock_gettime(CLOCK_REALTIME, {1130322148, 939977000}) = 0
[pid 28772] <... select resumed> )      = 1 (in [3])

参考:
https://linux.die.net/man/1/strace

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值