1 什么是 strace
strace 常用来跟踪进程执行时的系统调用和所接收的信号。在 Linux 世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。
strace 可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
2 什么是系统调用
系统调用(英语:system call),又称为系统呼叫,指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。操作系统的进程空间分为用户空间和内核空间:
 操作系统内核直接运行在硬件上,提供设备管理、内存管理、任务调度等功能。
 用户空间通过 API 请求内核空间的服务来完成其功能——内核提供给用户空间的这些 API, 就是系统调用
Linux 内核目前有 300 多个系统调用,详细的列表可以通过 syscalls 手册页查看。这些系统调用主要分为几类:
文件和设备访问类 比如 open/close/read/write/chmod 等
进程管理类 fork/clone/execve/exit/getpid 等
信号类 signal/sigaction/kill 等
内存管理 brk/mmap/mlock 等
进程间通信 IPC shmget/semget * 信号量,共享内存,消息队列等
网络通信 socket/connect/sendto/sendmsg 等
其他
查看系统调用帮助手册 man 2 函数名,例如下图所示:

3 strace 的应用场景
基于特定的系统调用或系统调用组进行过滤
通过统计特定系统调用的使用次数,所花费的时间,以及成功和错误的数量来分析系统调用的使用。
它跟踪发送到进程的信号。
通过 pid 附加到任何正在运行的进程。
调试性能问题,查看系统调用的频率,找出耗时的程序段
查看程序读取的是哪些文件从而定位比如配置文件加载错误问题
当程序出现“Out of memory”时被系统发出的 SIGKILL 信息所 kill
另外因为 strace 拿到的是系统调用相关信息,一般也即是 IO 操作信息,这个对于排查比如 cpu 占用 100%问题是无能为力的。这个时候就可以使用 GDB 工具了。

4 命令参数
我们输入以下命令,可以查看 strace 命令的参数。
strace -h
-c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出 strace 关于标准错误的调试信息. -f 跟踪由 fork 调用所产生的子进程. -ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的 filename.pid 中,pid 是各进程的进程号. -F 尝试跟踪 vfork 调用.在-f 时,vfork 不被跟踪. -h 输出简要的帮助信息. -i 输出系统调用的入口指针. -q 禁止输出关于脱离的消息. -r 打印出相对时间关于,,每一个系统调用. -t 在输出中的每一行前加上时间信息. -tt 在输出中的每一行前加上时间信息,微秒级. -ttt 微秒级输出,以秒了表示时间. -T 显示每一调用所耗的时间. -v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出. -V 输出 strace 的版本信息. -x 以十六进制形式输出非标准字符串
-xx 所有字符串以十六进制形式输出. -a column 设置返回值的输出位置.默认 为 40.

5 实用示例
1 跟踪已经在运行的进程,使用-p 选项能用在运行的进程上,输入以下命令:
strace -p 进程号
2 通过 strace 启动要跟踪的进程,./hello.sh 是要运行的文件,大家可以根据自己的需求自定义,如下所示:
strace ./hello.sh

迅为3399开发板Android系统-使用strace跟踪系统调用相关推荐

  1. 瑞芯微RK3399六核-迅为3399开发板介绍

    迅为3399开发板基于瑞芯微的RK3399处理器设计,Rockchip RK3399是瑞芯微推出的一款低功耗.高性能的应用处理器芯片,该芯片基于Big.Little架构,即具有独立的NEON协同处理器 ...

  2. 迅为瑞芯微3399开发板Ubuntu系统-安装ssh

    开发板上的烧写 ubuntu16.04,默认是没有 ssh 服务的,我们需要自己安装,ssh 服务是为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议 ...

  3. 迅为RK3568开发板Android12系统功能测试-开机启动

    烧写安卓 12 系统镜像,安卓 12 系统镜像在网盘资料"iTOP-3568 开发板\01_[iTOP-RK3568开发板]基础资料\011_iTOP-RK3568 开发板 Android1 ...

  4. 迅为RK3568开发板Android12 系统功能测试-有线网测试

    首先准备一个路由器,一根网线,如下图所示,这俩个网口都可以连接外网,将网口通过 网线连接到路由器的千兆口. 安卓 12 系统是 DHCP 的,开发板连接到路由器可以自动获取 IP 地址,然后就可以打开 ...

  5. 全志A40i开发板Android系统编译

    Android系统编译 A40i &T3 板卡用户可以通过飞凌嵌入式提供的网盘链接获取OKA40i-C开发板软件和硬件的文档及源码.软件和硬件的文档及源码下载方法不清楚的可联系飞凌嵌入式客服索 ...

  6. 迅为RK3399开发板Linux系统TFTP传输文件服务器测试

    本机测试:在/var/tftpboot 下面建立一个文件 test,在里面输入 hello world,然后保存该文件,如下图 再启动另一个终端,然后输入 tftp 127.0.0.1,如下图. 输入 ...

  7. 迅为iTOP3399开发板QT系统PCIE 4G移植-编译程序

    配套资料在网盘资料"iTOP-3399 开发资料汇总(不含光盘资料)\10_iTOP-3399 开发板 Linux 系统开发 \PCIE 4G 模块测试.zip"目录下. 45.1 ...

  8. linux imx6 书籍,迅为iMX6开发板-Linux系统-TFTP使用文档

    TFTP(Trivial File Transfer Protocol,简单文件传输协议),是一个基于 UDP 协议实 现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大.不复杂的应用 ...

  9. 基于android的串口开发板,210开发板Android系统串口程序

    最近由于项目需要,花了两天时间在Android平台下编写了一个串口助手软件.硬件平台是友善之臂的tiny210开发板.起初的想法是首先基于Linux驱动做一些修改,然后自行编写HAL层代码,最后编写A ...

最新文章

  1. python 内置函数的一部分
  2. jQuery常用方法(二)-事件
  3. Hive 常见问题与技巧【Updating】
  4. zsh性能分析(没搞完)
  5. sublime主题安装
  6. python 最小二乘回归 高斯核_从简单数学建模开始:08最小二乘准则的应用(附python代码)...
  7. 解决我的windows不是正版的方法?
  8. sql点滴41—MyISAM 和 InnoDB 讲解
  9. 1067 mysql,mysql免安装版1067错误终极解决办法图文教程
  10. 【Flink】Flink 基于 MailBox 实现的 StreamTask 线程模型
  11. 不能错过的linux驱动开发的经典书籍推荐
  12. C# TeeChart使用心得,干货
  13. PPP开源软件GMAP测试记录及原始数据比较
  14. winhttp API 获取服务器文件大小(更新时间)等
  15. linux触摸屏应用程序开发,linux触摸屏(一)编写触摸屏应用
  16. cad画正弦曲线lisp_cadlisp基础教程.pdf
  17. 手把手教你智能硬件开发(一) 我选Arduino
  18. 阿里云域名购买与备案,解析使用教程
  19. 在Linux下使用金山词霸2003(转)
  20. 大数据在职研究生哪个好_在职研究生大数据专业怎么样?

热门文章

  1. STL 标准模板库—容器部分【C++】
  2. OpenBot--DIY自动驾驶智能小车
  3. Oculus Rift S 399美元,真香
  4. MySql: 表级锁、行级锁、共享锁、排他锁、乐观锁、悲观锁
  5. vue异步问题解决方法
  6. 计算机格式化系统,Win7电脑怎么进行格式化?
  7. EasyRecovery15专业电脑数据恢复黑科技软件
  8. 偏微分方程数值解法python_基于python求解偏微分方程的有限差分法资料
  9. 【漫漫转码路】Python Day 15
  10. 熊市中,值得关注的项目都有这三大特征