linux程序调试命令strace

strace命令用法详解:

strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

strace常用参数:

-p	跟踪指定的进程
-f	跟踪由fork子进程系统调用
-F	尝试跟踪vfork子进程系统调吸入,与-f同时出现时, vfork不被跟踪
-o      filename 默认strace将结果输出到stdout。通过-o可以将输出写入到filename文件中
-ff	常与-o选项一起使用,不同进程(子进程)产生的系统调用输出到filename.PID文件
-r	打印每一个系统调用的相对时间
-t	在输出中的每一行前加上时间信息。 -tt 时间确定到微秒级。还可以使用-ttt打印相对时间
-v	输出所有系统调用。默认情况下,一些频繁调用的系统调用不会输出
-s	指定每一行输出字符串的长度,默认是32。文件名一直全部输出
-c	统计每种系统调用所执行的时间,调用次数,出错次数。
-e	expr	输出过滤器,通过表达式,可以过滤出掉你不想要输出

命令实例:

[root@tomcat02 ~]# strace cat /dev/null 
execve("/bin/cat", ["cat", "/dev/null"], [/* 26 vars */]) = 0
brk(0)                                  = 0x24ef000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8443faf000
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=70314, ...}) = 0
mmap(NULL, 70314, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b8443fb0000
close(3)                                = 0
open("/lib64/libc.so.6", 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\360\355A\2428\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1979000, ...}) = 0
mmap(0x38a2400000, 3803304, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x38a2400000
mprotect(0x38a2597000, 2097152, PROT_NONE) = 0
mmap(0x38a2797000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x197000) = 0x38a2797000
mmap(0x38a279c000, 18600, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x38a279c000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8443fc2000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b8443fc3000
arch_prctl(ARCH_SET_FS, 0x2b8443fc2b20) = 0
mprotect(0x38a2797000, 16384, PROT_READ) = 0
mprotect(0x38a1e1f000, 4096, PROT_READ) = 0
munmap(0x2b8443fb0000, 70314)           = 0
brk(0)                                  = 0x24ef000
brk(0x2510000)                          = 0x2510000
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=99158704, ...}) = 0
mmap(NULL, 99158704, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b8443fc4000
close(3)                                = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
open("/dev/null", O_RDONLY)             = 3
fstat(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
read(3, "", 32768)                      = 0
close(3)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?

每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。
strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。  

通用的完整用法:

strace -o output.txt -T -tt -e trace=all -p 28979

上面的含义是 跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。

2.在umount挂载目录时,直接卡住了,最后用 strace df -Th分析后结果挂载出问题了

strace df -Th

3.用strace跟踪 whoami的输出:

strace -o whoami-strace.txt whoami

  

参考文档:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html

转载于:https://www.cnblogs.com/saneri/p/5466519.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat相关 -- 内存设置

java内存溢出详解 一、常见的java内存溢出 1、java.lang.OutOfMemmoryError : Java heap space -- JVM Heap (jvm 堆溢出) JVM启动时自动设置JVM Heap的值,其初始空间(即 -Xms)是物理内存的1/64,最大空间(-Xms)不可超过物理内存。…

CoreWCF 1.0 正式发布,支持 .NET Core 和 .NET 5+ 的 WCF

CoreWCF 项目组正式发布 1.0 版本的 CoreWCF, 这是面向 .NET Core 平台的 WCF 移植版本。它支持 SOAP、NetTCP 和 WSDL 的相同实现。在代码中的使用方式于 WCF 相同,但是升级到使用 ASP.NET Core 作为服务宿主,并工作在 .NET Core 平台上。这是该项目的第…

【经典回放】多种语言系列数据结构算法:快速排序

快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过…

表头合并_多个Excel表格合并数据麻烦?试试Power Query轻松帮你解决

Hi!大家好!欢迎来到小龙自修室!又到了小龙分享时间!(今天的内容有点多,希望各位看官一定要看到最后!有惊喜)上一篇文字小龙和大家一起制作了一个限定数据内容录入的电子表格,我的表格我做主!表格…

C++入门指南及实战 第三步 基本变量

在C编程中,内置了一些基本数据类型用来存储一些不同类型的值。有字符类型 char 用以存储字符,如a、b、c、d、-、、1、2、4、3、>、?等;有整形 int 用以存储整数类型,如1、2、3、4、5、11、111、2311等;有浮点类型 …

OPCServer Modbus使用和配置

一,安装KEPware.Enhanced.OPC.DDE.KEPServer。(PLC数据传送给KEPServer,开发的程序用OPCServer读KEPServer) 设置ip地址后面是指的plc站号,此处必须和plc上站号对应。否则无法接收数据。 打开quick client 查看传值情况 二.C#程序代码 引用opcdaauto.dll…

C# 创建命名管道服务器

通过创建 NamedPipeServerStream 的一个新实例,来创建服务器。NamedPipeServerStream 派生自基类 PipeStream,PipeStream 派生自 Stream 基类,因此可以使用流的所有功能,例如,可以创建CryptoStream 或 GZipStream&…

在香蕉派 Banana Pi BPI-M1上使用 开源 OxOffice Impress

2019独角兽企业重金招聘Python工程师标准>>> 在香蕉派 Banana Pi BPI-M1上使用 开源 OxOffice Impress 在Banana Pi BPI-M1上使用OxOffice Impress,該簡報大小約26MB,採用自動播放機制。 OxOffice提供 arm linux的版本,可佈署在ar…

免杀新姿势:利用线程将恶意代码注入到内存中

本文讲的是免杀新姿势:利用线程将恶意代码注入到内存中,产生存放远程攻击线程的进程在这篇文章中我不想一步一步解释我编写的C#代码,但是我会展示下它能够绕过杀毒软件,并且操作非常简单,而且实用。 首先说明一下&…

【经典回放】多种语言系列数据结构算法:希尔排序

【希尔排序原理】每隔sp(整数)个数即取数并判断大小,交换,先构造局部有序序列,直到sp为1,构造完整的有序序列。 给出一组数据,如下: 0 1 2 3

Java之解决散列表的冲突用开放定址法和链表法

1 问题 理想状态下,散列表就是一个包含关键字的固定大小的数组,通过使用散列函数,将关键字映射到数组的不同位置,哈希函数可以将关键字均匀的分散到数组的不同位置,不会出现两个关键字散列值相同(假设关键…

python 手把手教你基于搜索引擎实现文章查重

前言 文章抄袭在互联网中普遍存在,很多博主都收受其烦。近几年随着互联网的发展,抄袭等不道德行为在互联网上愈演愈烈,甚至复制、黏贴后发布标原创屡见不鲜,部分抄袭后的文章甚至标记了一些联系方式从而使读者获取源码等资料。这…

lru算法实现 redis_使用数组与双向链表实现一个简单的LRU算法

什么是LRU算法?redis大家都玩过吧,你们好奇redis内存数据存满之后会发生什么吗?抛出异常?禁止使用?还是删除数据?其实redis设计了一种内润淘汰机制。noeviction(默认策略):屏蔽写操作&#xff0…

【经典回放】多种语言系列数据结构算法:归并排序

目录 干货1:C#语言实现归并排序! 干货2:C语言实现归并排序! 干货1:C#语言实现归并排序! 一、算法 1、思想基础

Java对象和类

转自原文:http://www.yiibai.com/java/java_object_classes.html java是一种面向对象的语言。由于具有面向对象特性的语言,Java支持以下基本概念: 多态性继承封装抽象化类对象实例方法消息解析在本章中,我们将探讨类和对象这些概念…

bzoj3224 Tyvj 1728 普通平衡树题解--Treap

题面: Description您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数&…

Blazor University (18)使用 RenderFragments 模板化组件 —— 创建 TabControl

原文链接:https://blazor-university.com/templating-components-with-renderfragements/creating-a-tabcontrol/创建一个 TabControl 组件源代码[1]接下来我们将创建一个 TabControl 组件。这将教您如何实现以下目标:将数据传递到 RenderFragment 以为其…

Java之GC机制

1 JVM基本结构 1)类加载器classLoader:在JVM启动时或者类运行时将需要的.class文件加载到内存中 2)内存区域(运行时数据区): 是在JVM运行的时候操作所分配的内存区 3)执行引擎:负…

ArcGIS实验教程——实验十八:叠置分析(Overlay Analysis)

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 目 录 一、实验描述 二、实验内容 三、实验目的 四、实验数据

《零基础看得懂的C语言入门教程 》——(一)脱离学习误区

本节视频连接: https://www.bilibili.com/video/BV1Qv411t7ae 新手C语言学习有些误区你应该知道,这样学习起来事半功倍~一、前言 距离上一次编写C语言的教程是5年前了(2015年),由于自己是从初一时开始学习编程&#…