strace用法
strace -- trace system calls and signals strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的系统信息。
在最简单的情况下,strace追踪指定的指令,直到它退出。strace可以拦截并记录进程的系统调用和进程接收到的信号。你不仅可以从命令行调试一个新开始的程序,也可以把strace绑定到一个已有的PID上去。
strace三个最常用的参数:
-f: 除了跟踪当前进程外,还跟踪其子进程。
-o file: 默认情况下strace打印输出到标准错误,可以使用-o选项输出到指定的文件。
-p pid: 指定需要跟踪的进程pid
-t : 打印跟踪输出中每一行的时间
-T: 显示程序进行的每个系统调用开始和结束之间的时间差
-c: 可以生成每个系统调用的总时间,调用和错误报告。
-i: 显示程序在每次系统调用时的指针
-e trace=network : 只记录和网络api相关的系统调用
strace -f -o vim.strace vim:跟踪vim及其子进程的运行,将输出信息写到vim.strace文件中。
1.跟踪Linux 命令的系统调用,可以简单的使用strace 运行一个命令,这里使用df命令做一个演示:
[root@localhost ~]# strace df -h
execve("/bin/df", ["df", "-h"], [/* 23 vars */]) = 0
brk(0) = 0x983000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4bc0578000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=54957, ...}) = 0
mmap(NULL, 54957, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f4bc056a000
close(3) = 0
open("/lib64/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\356\1\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1924768, ...}) = 0
mmap(NULL, 3750184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f4bbffc5000
.......
跟踪中的每一行都包含系统调用名称,后跟括号中的参数及其返回值。
从上面的输出中,可以看到由df -h命令进行的各种类型的系统调用。
open("/etc/ld.so.cache", O_RDONLY) = 3
open ---->是一个系统调用函数
("/etc/ld.so.cache", O_RDONLY) ------>是系统调用函数的参数
3 ---->系统调用的返回值
可以使用strace寻找被程序读取的配置文件,例如:
[root@localhost ~]# strace -e trace=open mysql | grep my.cnf
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib64/libpthread.so.0", O_RDONLY) = 3
open("/lib64/librt.so.1", O_RDONLY) = 3
open("/lib64/libdl.so.2", O_RDONLY) = 3
open("/lib64/libncurses.so.5", O_RDONLY) = 3
open("/usr/lib64/libstdc++.so.6", O_RDONLY) = 3
open("/lib64/libm.so.6", O_RDONLY) = 3
open("/lib64/libgcc_s.so.1", O_RDONLY) = 3
open("/lib64/libc.so.6", O_RDONLY) = 3
open("/lib64/libtinfo.so.5", O_RDONLY) = 3
open("/etc/my.cnf", O_RDONLY) = 3
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib64/libnss_files.so.2", O_RDONLY) = 3
open("/etc/services", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
open("/usr/local/mysql/share/charsets/Index.xml", O_RDONLY) = 3
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
+++ exited with 1 +++
-e trace=open 展示特定的系统调用(还可以使用write、network等等man strace有详细说明)
还可以显示时间戳 -tt选项可以展示微秒级别的时间戳。
[root@localhost ~]# strace -t ls
:: execve("/usr/bin/ls", ["ls"], [/* 26 vars */]) =
:: brk(NULL) = 0x154b000
:: mmap(NULL, , PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -, ) = 0x7f33240bf000
:: access("/etc/ld.so.preload", R_OK) = - ENOENT (No such file or directory)
:: open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) =
:: fstat(, {st_mode=S_IFREG|, st_size=, ...}) =
:: mmap(NULL, , PROT_READ, MAP_PRIVATE, , ) = 0x7f33240b4000
:: close() =
:: open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) =
:: read(, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300j\0\0\0\0\0\0"..., ) =
:: fstat(, {st_mode=S_IFREG|, st_size=, ...}) =
:: mmap(NULL, , PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, , ) = 0x7f3323c78000
:: mprotect(0x7f3323c9c000, , PROT_NONE) =
:: mmap(0x7f3323e9b000, , PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, , 0x23000) = 0x7f3323e9b000
:: mmap(0x7f3323e9d000, , PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -, ) = 0x7f3323e9d000
:: close() =
strace用法的更多相关文章
- strace用法说明
strace命令详解strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用. strace 显示这些调用的参数并返回符号形式的值.strace 从内核接收信息,而且不需要以任何 ...
- 使用strace命令跟踪系统调用
一.是什么strace? strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由 ...
- 28、应用调试之strace命令来跟踪系统调用
strace是个工具,在使用时需要先按照,见韦东山书籍: 1.tar xjf starce-4.5.15.tar.bz2 2.cd strace-4.5.15/ 3.patch -p1 < .. ...
- 【Linux】【Commands】trouble shooting命令详解目录
1. 简介 1.1. 最近看到阿里的运维招聘需要熟练掌握以下的命令,我就针对这几个命令做一下总结,有些命令我觉得别人总结的挺好了,我就不赘述了 1.2. 还有一些其他我觉得用得到的命令的用法会在第三部 ...
- strace命令简单用法
strace可以显示一个程序经历的系统调用,接收到的信号等信息. 用法: 1.strace -ff -o output programName 将程序programName的写入output文件中,- ...
- linux的strace命令用法
strace命令用法 调用:strace [ -dffhiqrtttTvxx ] [ -acolumn ] [ -eexpr ] …[ -ofile ] [ -ppid ] … [ -sstrsize ...
- 主机管理+堡垒机系统开发:strace命令用法详解(六)
一.简单介绍 strace是什么? 按照strace官网的描述, strace是一个可用于诊断.调试和教学的Linux用户空间跟踪器.我们用它来监控用户空间进程和内核的交互,比如系统调用.信号传递.进 ...
- LINUX的STRACE命令用法 [转]
调用:strace [ -dffhiqrtttTvxx ] [ -acolumn ] [ -eexpr ] ...[ -ofile ] [ -ppid ] ... [ -sstrsize ] [ -u ...
- [转帖]强大的strace命令用法详解
强大的strace命令用法详解 文章转自: https://www.linuxidc.com/Linux/2018-01/150654.htm strace是什么? 按照strace官网的描述, st ...
随机推荐
- vue中的导航守卫
官方文档地址: 导航守卫:https://router.vuejs.org/zh-cn/advanced/navigation-guards.html 好的,重点内容 router.beforeEac ...
- Django中间件的执行流程
Django中间件的执行流程. 请求到达中间件之后,先按照正序执行每个注册中间件的process_reques方法,process_request方法返回的值是None,就依次执行, 如果返回的值是H ...
- Net Core应用,在CentOS上运行
Net Core应用,在CentOS上运行 本文主要介绍下运用docker虚拟技术打包Asp.net core应用. Docker作为一个开源的应用容器引擎,近几年得到广泛的应用,使用Docker我们 ...
- 转 sqlplus/RMAN/lsnrctl 等工具连接缓慢
AIX上sqlplus /as sysdba rman target / 或者lsnrctl start时或者通过sqlplus system/oracle@orcl这样通过监听连接等方式来登陆 ...
- 转 event 'utl_file I/O':
The ASH report shows tables and data files with wait event 'utl_file I/O': CHANGES No changes. CAUSE ...
- 举例实用详解sc.textFile()和wholeTextFiles()
谈清楚区别,说明白道理,从案例开始: 1 数据准备 用hdfs存放数据,且结合的hue上传准备的数据,我的hue截图: 每个文件下的数据: 以上是3个文件的数据,每一行用英文下的空格隔开: 2 测试 ...
- P4874 回形遍历 —模拟
思路: 写完后信心满满,结果超时. 我很不解,下了个数据结果——,z竟然是大于1e10的,跟题目给的不一样啊 原来如此,正解是一行一行的走的... 注意当到两边一样近时,应优先向下和右!!!!!! 这 ...
- 浅析HTML的元素类型及其转换
大家都知道html是由标签元素组成的,在了解元素的类型转换之前,让我们先来了解一下html的元素类型. 一.html元素类型分为两种:块级元素和内联元素,内联元素又被称为行内元素. 常见的块级元素有 ...
- 使用jdbc完成curd操作
jdbc: java操作数据库,jdbc是oracle公司指定的一套规范(一套接口) 驱动:jdbc的实现类,由数据库厂商提供 我们可以通过一套规范操作不同的数据库(多态) jdbc作用: 连接数据库 ...
- linux 查看dd进度
Linux下显示dd命令的进度: dd if=/dev/zero of=/tmp/zero.img bs=10M count=100000 想要查看上面的dd命令的执行进度,可以使用下面几种方法: 比 ...