centos7 strace的安装

zz/2024/7/13 11:43:15

strace是一个功能强大的调试,分析诊断工具,主要用来监视系统调用。

1.下载strace-xxx.tar.xz

    下载网址是:http://sourceforge.net/project/showfiles.php?group_id=2861&package_id=2819;

2.解压

      $  xz -d   ***.tar.xz

      $  tar -xvf   ***.tar

 

      可以看到这个压缩包也是打包后再压缩,外面是xz压缩方式,里层是tar打包方式。

      补充:目前可以直接使用 tar xvJf  ***.tar.xz来解压

3.配置

        ./configure

4.编译

      make

5.安装

    make  install

6.使用

 

见博文:http://blog.csdn.net/u011630575/article/details/52077563


strace命令的详细参数如下:

usage: strace [-dffhiqrtttTvVxx] [-a column] [-e expr] ... [-o file]

              [-p pid] ... [-s strsize] [-u username] [-E var=val] ...

              [command [arg ...]]

   or: strace -c [-e expr] ... [-O overhead] [-S sortby] [-E var=val] ...

              [command [arg ...]]

-c -- count time, calls, and errors for each syscall and report summary

-f -- follow forks, -ff -- with output into separate files

-F -- attempt to follow vforks, -h -- print help message

-i -- print instruction pointer at time of syscall

-q -- suppress messages about attaching, detaching, etc.

-r -- print relative timestamp, -t -- absolute timestamp, -tt -- with usecs

-T -- print time spent in each syscall, -V -- print version

-v -- verbose mode: print unabbreviated argv, stat, termio[s], etc. args

-x -- print non-ascii strings in hex, -xx -- print all strings in hex

-a column -- alignment COLUMN for printing syscall results (default 40)

-e expr -- a qualifying expression: option=[!]all or option=[!]val1[,val2]...

   options: trace, abbrev, verbose, raw, signal, read, or write

-o file -- send trace output to FILE instead of stderr

-O overhead -- set overhead for tracing syscalls to OVERHEAD usecs

-p pid -- trace process with process id PID, may be repeated

-s strsize -- limit length of print strings to STRSIZE chars (default 32)

-S sortby -- sort syscall counts by: time, calls, name, nothing (default time)

-u username -- run command as username handling setuid and/or setgid

-E var=val -- put var=val in the environment for command

-E var -- remove var from the environment for command

 

 

1. 跟踪ls命令

# strace ls
execve("/bin/ls", ["ls"], [/* 46 vars */]) = 0
brk(0)                                  = 0x1ab9000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fcf695fb000
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=102786, ...}) = 0
mmap(NULL, 102786, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fcf695e1000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/librt.so.1", O_RDONLY)       = 3
(省略)

2. 跟踪执行中的命令

用p选项指定PID。

# strace -p 42198

当权限不够时,会出现如下错误。

$ strace -p 42198
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted

3. 跟踪指定的系统调用

用e选项指定open系统调用。

# strace -e open ls
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/librt.so.1", O_RDONLY)       = 3
open("/lib/libselinux.so.1", O_RDONLY)  = 3
open("/lib/libacl.so.1", O_RDONLY)      = 3
open("/lib/libc.so.6", O_RDONLY)        = 3
(省略)

可如下指定多个系统调用。

# strace -e trace=open,read ls
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/librt.so.1", O_RDONLY)       = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220!\0\0\0\0\0\0"..., 832) = 832
open("/lib/libselinux.so.1", O_RDONLY)  = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20Y\0\0\0\0\0\0"..., 832) = 832

4. 跟踪结果保存到文件

用o选项指定输出结果的文件。

# strace -o zabbix.cc.txt ls

5. 添加时间戳

用-t选项的话,会在输出结果里追加时间戳。

# strace -t ls
17:43:25 execve("/bin/ls", ["ls"], [/* 47 vars */]) = 0
17:43:25 brk(0)                         = 0x8ad000
17:43:25 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
17:43:25 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb41137b000
17:43:25 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)

6. 添加系统调用所消费的时间

# strace -r ls0.000000 execve("/bin/ls", ["ls"], [/* 21 vars */]) = 00.000298 brk(0)                    = 0x22370000.000063 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fcfae0c50000.000061 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)0.000075 open("/etc/ld.so.cache", O_RDONLY) = 30.000044 fstat(3, {st_mode=S_IFREG|0644, st_size=31171, ...}) = 00.000052 mmap(NULL, 31171, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fcfae0bd0000.000035 close(3)                  = 0
(省略)

7. 输出跟踪结果的摘要

# strace -c ls
(省略)
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- -----------------nan    0.000000           0        10           read-nan    0.000000           0        18           write-nan    0.000000           0        12           open-nan    0.000000           0        14           close-nan    0.000000           0        12           fstat-nan    0.000000           0        28           mmap-nan    0.000000           0        16           mprotect-nan    0.000000           0         3           munmap-nan    0.000000           0         3           brk-nan    0.000000           0         2           rt_sigaction-nan    0.000000           0         1           rt_sigprocmask-nan    0.000000           0         2           ioctl-nan    0.000000           0         1         1 access-nan    0.000000           0         1           execve-nan    0.000000           0         1           fcntl-nan    0.000000           0         2           getdents-nan    0.000000           0         1           getrlimit-nan    0.000000           0         1           statfs-nan    0.000000           0         1           arch_prctl-nan    0.000000           0         2         1 futex-nan    0.000000           0         1           set_tid_address-nan    0.000000           0         1           set_robust_list
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                   133         2 total

 

 

 

 

      

 


http://www.ngui.cc/zz/2762651.html

相关文章

Android Fragment生命周期和用法解析

Fragment生命周期图: Fragment与Activity生命周期对比图: 2 生命周期分析 1. 当一个fragment被创建的时候,它会经历以下状态. onAttach()onCreate()onCreateView()onActivityCreated() 2. 当这个fragment对用户可见的时候,它会…

Android UI控件之ImageSwitcher(图片切换)

从该名字就可以看出来,ImageSwitcher是一个图片切换控件,可以在一系列的图片中,逐张 的显示特定的图片,利用该控件可以实现图片浏览器中的上一张,下一张的功能。其使用方法也较 为简单,不过需要注意的是Ima…

Android 不能退出的解释(android.os.Process.killProcess(android.os.Process.myPid()))

为什么要写这篇文章? 因为网上有很多种退出方法,可是实际上很多方法都不通用(在某个版本下可用,到了另一个版本就不行),或者方法的实际效果根本就和其描述不符(也不知道那些发帖的人测没测试过…

在 rest 风格 url 资源中, GET/POST/PUT/DELETE 等方法各有什么作用与区别?

在spring mvc 中: spring mvc 支持REST风格的请求方法,GET、POST、PUT和DELETE四种请求方法分别代表了数据库CRUD中的select、insert、update、delete 如何这个地方不懂,可以看http://blog.csdn.net/u011630575/article/details/50550127 &a…

android:正在运行的某个android程序中进行编写内容,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法

正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法。 情景描述:正在一个界面进行编辑工作,突然来一条短信,点击通知读取短信,然后重新点击App,进入原…

Android Context上下文(几种的对比,应用场景)

1、Context概念 其实一直想写一篇关于Context的文章,但是又怕技术不如而误人子弟,于是参考了些资料,今天准备整理下写出来,如有不足,请指出,参考资料会在醒目地方标明。 Context,相信不管是第一…

mysql查询(同一个表中相邻的两条记录进行运算)

通过添加一条行记录的方法&#xff0c;重新生成一个表&#xff0c;然后在通过可以通过表的连接进行运算。 --通过一个初始值为0的变量rownum&#xff0c;依次递增1来实现行号 SELECTrownum:rownum1 AS rownum,name FROM temp,(SELECT rownum:0) temp WHERE rownum<4&#xf…

mysql 利用自增数据项的方法,对同一个表有某种关联的数据进行处理。(利用增加一项的方法)

问题背景&#xff1a; stage表有app_id,stage_id,submission_time等数据项。要求对该表的指定app_id的所有stage_id &#xff0c;按submission_time 从小到大排序&#xff0c;并且相邻的两项进行做差。 另一个描述如下&#xff1a; 对同一个app_id的所有stage_id&#xff0c;按…

git的 .gitignore 如何配置(git如何忽略、追踪文件)

.gitignore 配置文件用于配置不需要加入版本管理的文件&#xff0c;配置好该文件可以为我们的版本管理带来很大的便利&#xff0c; 以下是个人对于配置 .gitignore 的一些心得。 1、配置语法&#xff1a; 以斜杠“/”开头表示目录&#xff1b; 以星号“*”通配多个字符&#xf…

Running migrations: No migrations to apply.(django不能创建数据库中的表的问题)

第一步&#xff1a; 删除该app名字下的migrations下的__init__.py等文件。 第二步&#xff1a; 进入数据库&#xff0c;找到django_migrations的表&#xff0c;删除该app名字的所有记录。 第三步&#xff1a;执行下面这两条命令&#xff1a;&#xff08;在项目目录下&#xf…