我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux系统调试工具strace怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux系统调试工具strace怎么用

这篇文章主要讲解了“Linux系统调试工具strace怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统调试工具strace怎么用”吧!

1、简介

strace是Linux系统中一款调试程序的软件,是一个简单的跟踪系统调用的执行工具,可以检查每一个应用程序所使用的系统调用。

2、安装

官方网址:http://sourceforge.net/project/showfiles.php?group_id=2861&package_id=2819

  [root@RedHat_test ~]# yum install strace

3、strace命令常用格式

  [root@RedHat_test ~]# man strace  -tt : 在每行输出的前面,显示毫秒级别的时间  -T : 显示每次系统调用所花费的时间  -v : 对于某些相关调用,把完整的环境变量,文件stat结构等打出来。  -f : 跟踪目标进程,以及目标进程创建的所有子进程  -e : 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称  -o : 把strace的输出单独写到指定的文件  -s : 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节  -p : 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可。

4、跟踪ls命令

  [root@RedHat_test opt]# strace ls  execve("/bin/ls", ["ls"], []) =0  brk(0)                                  =0x1ab9000  access("/etc/ld.so.nohwcap", F_OK)      =-1ENOENT (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)      =-1ENOENT (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)      =-1ENOENT (No such file or directory)  open("/lib/librt.so.1", O_RDONLY)       =3

5、寻找被程序读取的php配置文件

  [root@RedHat_test ~]# strace php 2>&1 | grep php.ini

6、跟踪指定的系统调用

  [root@RedHat_test ~]# strace -e open cat dead.letter  open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) =3  open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) =3  open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) =3  open("dead.letter", O_RDONLY)           =-1ENOENT (No such file or directory)  cat: dead.letteropen("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) =3  open("/usr/share/locale/zh_CN.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) =-1ENOENT (No such file or directory)  open("/usr/share/locale/zh_CN.utf8/LC_MESSAGES/libc.mo", O_RDONLY) =-1ENOENT (No such file or directory)  open("/usr/share/locale/zh_CN/LC_MESSAGES/libc.mo", O_RDONLY) =3  open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) =3  : 没有那个文件或目录  +++exited with 1+++

7、跟踪进程

  [root@RedHat_test ~]# strace -p 2208  strace: Process 2208attached  restart_syscall(... resuming interrupted poll ...>  ) =1  read(5, "\1\0\0\0\0\0\0\0", 16)         =8  futex(0x560eaba76640, FUTEX_WAKE_PRIVATE, 1) =1  poll([{fd=5, events=POLLIN}, {fd=8, events=POLLIN}], 2, -1) =1([{fd=5, revents=POLLIN}])  read(5, "\1\0\0\0\0\0\0\0", 16)         =8  poll([{fd=5, events=POLLIN}, {fd=8, events=POLLIN}], 2, -1) =1([{fd=5, revents=POLLIN}])  read(5, "\1\0\0\0\0\0\0\0", 16)         =8  poll([{fd=5, events=POLLIN}, {fd=8, events=POLLIN}], 2, -1) =1([{fd=8, revents=POLLIN}])  write(5, "\1\0\0\0\0\0\0\0", 8)         =8  write(7, "\1\0\0\0\0\0\0\0", 8)         =8  futex(0x560eaba6b9e0, FUTEX_WAKE_PRIVATE, 1) =1  futex(0x560eaba861c0, FUTEX_WAKE_PRIVATE, 1) =1  futex(0x560eaba6d198, FUTEX_WAKE_PRIVATE, 1) =1  poll([{fd=8, events=POLLIN}], 1, 0)     =1([{fd=8, revents=POLLIN}])  read(8, "\2\0\0\0\200\0\0\0}\327\5\0\20\0\0\00018452\0\0\0\0\0\0\0\0\0\0\0"..., 2048) =64  ----------------------------------------------------------------------------------------  常见使用方法  [root@RedHat_test ~]# strace -T -e access -p 2208  ----------------------------------------------------------------------------------------  ----------------------------------------------------------------------------------------

8、统计跟踪结果的概要

  [root@RedHat_test ~]# strace -c ls  1.pyfile.log  scripts tsar  correct jdk-8u91-linux-x64.tar.gz test     yunweimao  % time     seconds usecs/call     calls   errors syscall  --------------------------------------------------------------  26.43    0.000315          12       27          mmap  15.52    0.000185          19       10          open   9.98    0.000119           7       18          mprotect   6.71    0.000080          10        8          read   6.71    0.000080           6       13          close   6.21    0.000074           7       11          fstat   4.45    0.000053          27        2          munmap   3.86    0.000046          23        2          statfs   2.85    0.000034          34        1          stat   2.68    0.000032          16        2          getdents   2.60    0.000031          31        1          openat   2.18    0.000026          13        2          write   2.10    0.000025          13        2        1access   1.85    0.000022          22        1          set_tid_address   1.59    0.000019           6        3          brk   1.26    0.000015           8        2          ioctl   1.01    0.000012           6        2          rt_sigaction   0.59    0.000007           7        1          execve   0.50    0.000006           6        1          getrlimit   0.50    0.000006           6        1          set_robust_list   0.42    0.000005           5        1          rt_sigprocmask   0.00    0.000000           0        1          arch_prctl  --------------------------------------------------------------  100.00    0.001192                   112        1total

9、保存输出结果

  [root@RedHat_test ~]# strace -o process_strace -p 2208  [root@RedHat_test ~]# ls  process_strace  [root@RedHat_test ~]# tail -f 10 process_strace   tail: 无法打开"100"读取数据: 没有那个文件或目录  ==> process_strace   futex(0x560eaba6b9e0, FUTEX_WAKE_PRIVATE, 1) =1  futex(0x560eaba861c0, FUTEX_WAKE_PRIVATE, 1) =1  futex(0x560eaba6d198, FUTEX_WAKE_PRIVATE, 1) =1  poll([{fd=8, events=POLLIN}], 1, 0)     =1([{fd=8, revents=POLLIN}])  read(8, "\2\0\0\0\0\2\0\0\0\0\0\0\20\0\0\00018457\0\0\0\0\0\0\0\0\0\0\0"..., 2048) =64  poll([{fd=8, events=POLLIN}], 1, 0)     =0(Timeout)  write(5, "\1\0\0\0\0\0\0\0", 8)         =8  poll([{fd=5, events=POLLIN}, {fd=8, events=POLLIN}], 2, -1) =1([{fd=5, revents=POLLIN}])  read(5, "\2\0\0\0\0\0\0\0", 16)         =8  poll([{fd=5, events=POLLIN}, {fd=8, events=POLLIN}], 2, -1detached ...>

10、跟踪nginx, 看其启动时都访问了哪些文件

  [root@RedHat_test ~]# strace -tt -T -f -e trace=file -o /data/log/strace.log -s 1024 service nginx restart  [root@RedHat_test ~]# cat /data/log/strace.log  3259713:51:52.873281 execve("/usr/sbin/service", ["service", "nginx", "restart"], []) =00.000319>  3259713:51:52.874064 access("/etc/ld.so.preload", R_OK) =-1ENOENT (No such file or directory) 0.000017>  3259713:51:52.874184 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) =30.000017>  3259713:51:52.874343 open("/lib64/libtinfo.so.5", O_RDONLY|O_CLOEXEC) =30.000017>  3259713:51:52.874549 open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) =30.000017>  3259713:51:52.874750 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) =30.000017>  # 每一行输出的最后尖括号中的数据表示执行耗时,单位是秒

11、显示时间戳

  [root@RedHat_test ~]# strace -t ls  11:48:02 execve("/usr/bin/ls", ["ls"], []) =0  11:48:02 brk(NULL)                      =0x23ba000  11:48:02 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =0x7fa562bae000  11:48:02 access("/etc/ld.so.preload", R_OK) =-1ENOENT (No such file or directory)  11:48:02 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) =3  11:48:02 fstat(3, {st_mode=S_IFREG|0644, st_size=35957, ...}) =0  11:48:02 mmap(NULL, 35957, PROT_READ, MAP_PRIVATE, 3, 0) =0x7fa562ba5000  11:48:02 close(3)                       =0  11:48:02 open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) =3  11:48:02 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320i\0\0\0\0\0\0"..., 832) =832  11:48:02 fstat(3, {st_mode=S_IFREG|0755, st_size=155784, ...}) =0  11:48:02 mmap(NULL, 2255184, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =0x7fa562767000  11:48:02 mprotect(0x7fa56278b000, 2093056, PROT_NONE) =0  11:48:02 mmap(0x7fa56298a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x23000) =0x7fa56298a000  11:48:02 mmap(0x7fa56298c000, 6480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) =0x7fa56298c000  11:48:02 close(3)                       =0  11:48:02 open("/lib64/libcap.so.2", O_RDONLY|O_CLOEXEC) =3  11:48:02 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \26\0\0\0\0\0\0"..., 832) =832  11:48:02 fstat(3, {st_mode=S_IFREG|0755, st_size=20032, ...}) =0  ----------------------------------------------------------------------------------------  -tt : 展示微秒级别的时间戳  [root@RedHat_test ~]# strace -tt ls  -ttt : 展示微秒级的时间戳,但是它并不是打印当前时间,而是显示自从epoch(译注:1970年1月1日00:00:00 UTC)以来的所经过的秒数  [root@RedHat_test ~]# strace -ttt ls  -r : 展示相对时间戳  [root@RedHat_test ~]# strace -r ls  ----------------------------------------------------------------------------------------

感谢各位的阅读,以上就是“Linux系统调试工具strace怎么用”的内容了,经过本文的学习后,相信大家对Linux系统调试工具strace怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux系统调试工具strace怎么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux系统调试工具strace怎么用

这篇文章主要讲解了“Linux系统调试工具strace怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统调试工具strace怎么用”吧!1、简介strace是Linux系统中
2023-06-28

Linux strace工具怎么使用

这篇文章主要讲解了“Linux strace工具怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux strace工具怎么使用”吧!一个简单的例子如何使用strace对程序进行跟
2023-06-28

Linux系统中串口调试工具怎么用

这篇文章主要介绍了Linux系统中串口调试工具怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实验环境:OS: Ubuntu16.04 Kernel: 4.4.0mini
2023-06-27

Linux系统中gdb程序调试工具怎么用

这篇文章主要为大家展示了“Linux系统中gdb程序调试工具怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统中gdb程序调试工具怎么用”这篇文章吧。  一、常规调试  gdb是
2023-06-13

怎么在Linux上用strace来理解系统调用

本篇内容介绍了“怎么在Linux上用strace来理解系统调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用 strace 跟踪用户进程
2023-06-16

Linux系统下常用的调试工具有哪些

本文将为大家详细介绍“Linux系统下常用的调试工具有哪些”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“Linux系统下常用的调试工具有哪些”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下
2023-06-28

strace命令怎么在Linux系统中使用

strace命令怎么在Linux系统中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.strace简介strace常用来跟踪进程执行时的系统调用和所接收的信号。 通过st
2023-06-09

Linux系统工具Systemd怎么用

小编给大家分享一下Linux系统工具Systemd怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程
2023-06-27

Linux程序调试工具gdb怎么使用

这篇文章主要介绍“Linux程序调试工具gdb怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux程序调试工具gdb怎么使用”文章能帮助大家解决问题。gdb是GNU开源组织发布的一个强大
2023-06-27

怎么在linux系统中使用strace命令

这期内容当中小编将会给大家带来有关怎么在linux系统中使用strace命令,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。调用:strace [ -dffhiqrtttTvxx ] [ -acolumn
2023-06-10

Linux系统抓包工具tcpdump怎么用

今天给大家介绍一下Linux系统抓包工具tcpdump怎么用。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。tcpdump是Linux系统中一个数据包解析工具,
2023-06-28

Linux系统监视工具Glances怎么用

这篇文章给大家分享的是有关Linux系统监视工具Glances怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Glances 是一个由 Python 编写,使用 psutil 库来从系统抓取信息的基于 cur
2023-06-27

Linux系统监控工具Collectl怎么用

这篇文章跟大家分析一下“Linux系统监控工具Collectl怎么用”。内容详细易懂,对“Linux系统监控工具Collectl怎么用”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习
2023-06-28

Linux系统信息统计工具dstat怎么用

这篇文章主要介绍Linux系统信息统计工具dstat怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!dstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工
2023-06-27

python调试工具pdb怎么使用

这篇文章主要讲解了“python调试工具pdb怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python调试工具pdb怎么使用”吧!一、pdb 有2种用法pdb:python deb
2023-07-04

Ubuntu系统下Pygame的调试工具介绍

在Ubuntu系统下,Pygame的调试工具主要包括以下几种:Pygame Inspector:这是一个专门用于Pygame的程序调试器。它可以帮助开发者检查Pygame程序中的对象、属性和方法,并提供交互式界面以便于调试。通过安装Pyga
Ubuntu系统下Pygame的调试工具介绍
2024-10-13

Linux系统IO分析工具iotop怎么用

这篇文章给大家分享的是有关Linux系统IO分析工具iotop怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。iotop是linux系统下测试硬盘IO读写的工具,简单的说,iotop是一个用来监视磁盘I/O使
2023-06-27

linux中系统清理工具BleachBit怎么用

这篇文章主要介绍linux中系统清理工具BleachBit怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!BleachBit 是一款专为 Linux 设计的系统清理工具。使用 BleachBit,你可以清理系统中
2023-06-16

Linux系统wegt下载工具怎么使用

Linux系统wegt下载工具怎么使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。wget是Linux系统中一个比不可少的的下载文件的工具,可以支持HTTP,HTTPS和
2023-06-28

Linux系统审计工具Lynis怎么使用

这篇“Linux系统审计工具Lynis怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux系统审计工具Lynis
2023-06-28

编程热搜

目录