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 ...
随机推荐
- 搞定vscode编写java
下载vscode: 地址: https://code.visualstudio.com/ 安装插件 我这里下载的是绿色版,所以解压后 向桌面发送一个快捷方式 找到VS Code 的快捷方式位置: 右键 ...
- netty~引用对象引用
从InBound里读取的ByteBuf要手动释放,还有自己创建的ByteBuf要自己负责释放.这两处要调用这个release方法. write Bytebuf到OutBound时由netty负责释放, ...
- java preparement
1.建立链接 Connection conn = getDataSource().getConnection(); PreparedStatement ps = null; 2不自动 Commit 不 ...
- RL_RTX函数
1 延时:os_itv_set(usFrequency) //设置延时周期,配合os_itv_wait使用:os_itv_wait() 是绝对延迟是包含调用前的时间, os_dly_wait() 是相 ...
- 《深入理解java虚拟机》笔记(8)类的加载机制
一.类加载机制 类加载器将类的.class文件中的二进制数据读入到内存中,将其放在方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位 ...
- MapReduce实战项目:查找相同字母组成的字谜
实战项目:查找相同字母组成的字谜 项目需求:一本英文书籍中包含有成千上万个单词或者短语,现在我们要从中找出相同字母组成的所有单词. 数据集和期望结果举例: 思路分析: 1)在Map阶段,对每个word ...
- PHP正则表达式 - 附录(常用正则表达式)
常用正则表达式附录I 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: "^\d+$" //非负整数(正整数 + 0) "^[0-9]*[1- ...
- C# 操作 sqlite
1.下载sqlite:http://system.data.sqlite.org/downloads/1.0.94.0/sqlite-netFx20-setup-bundle-x86-2005-1.0 ...
- 前后端分离 vue+springboot 跨域 session+cookie失效问题
环境: 前端 vue ip地址:192.168.1.205 后端 springboot2.0 ip地址:192.168.1.217 主要开发后端. 问题: 首先登陆成功时将用户存在session ...
- jsp使用中$的符号使用失效
解决方法 添加一段话 <%@ page isELIgnored="false"%> 原因:因为jsp servlet版本问题,2.3及2.3之前的版本isELIgno ...