用户态调测工具(一):strace和ltrace

简单科普:Linux的用户态和内核态

Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件–控制计算机的硬件资源,并提供上层应用程序运行的环境。
用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口:即系统调用。
一般来说系统调用经过:用户调用syscall->glibc库->内核执行,返回值->glibc库->syscall->用户。
除非内核提供接口,否则用户态无法访问到内核资源。

Strace常用来跟踪进程在用户态执行的系统调用流程,单不会跟踪到内核里面发生的事情(顺便提一句,内核里面用ftrace)。

输出含义

以strace ls为例:

$ strace ls
execve("/bin/ls", ["ls"], [/* 26 vars */]) = 0
brk(NULL) = 0x1ad4000
access("/etc/ld.so.nohwcap", FOK) = -1 ENOENT (No such file or directory) mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f397bd49000 access("/etc/ld.so.preload", ROK) = 0

每一行都是一条系统调用,包含调用函数,函数参数,函数返回值,但不会显示内核的系统调用和流程。

参数

说明:随着系统的不同和工具包的升级,不同环境命令支持情况也不相同,个人最好养成查看命令帮助使用command –help的习惯。

-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello小崔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值