strace,procfs,mtrace介绍

本文介绍了Linux下的Strace工具,包括其功能、编译与使用方法,以及与其类似的procfs和mtrace(用于glibc内存管理跟踪)的使用。重点讲解了如何通过Strace跟踪系统调用,以及如何使用mtrace进行内存泄漏检测。
摘要由CSDN通过智能技术生成

strace工具

介绍

Strace是 Linux 环境下的一款 程序调试工具 , 用于检查一个应用程序所使用的系统调用以及它所接收的系统信息

交叉编译

源码地址:Index of /files/

解压编译:

tar xf strace-6.7.tar.xz

cd strace-6.7/

#配置使用的交叉编译工具

#FY平台AP侧使用aarch64-linux-gnu,CP侧使用arm-linux-gnueabihf

./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc

make

成果物strace位于./src目录下

命令使用说明

参数

描述

-c

统计每一个系统调用所执行的时间、次数和出错的次数等

-d

输出strace关于标准错误的调试信息

-f

跟踪目标进程,以及目标进程创建的所有子进程

-ff

如果提供-o filename,则将所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号

-i

输出系统调用的入口指针

-q

禁止输出关于脱离的消息

-r

输出每一个系统调用的相对时间

-t

在输出中的每一行前加上时间信息。例如164528

-tt

在输出中的每一行前加上时间信息,精确到微秒。例如111859.759546

-ttt

在输出中的每一行前加上时间信息,精确到微秒,而且时间表示为UNIX时间戳。例如1486111461.650434

-T

显示每次系统调用所花费的时间

-v

对于某些相关调用,把完整的环境变量、文件stat结构等打印出来

-x

以十六进制形式输出非标准字符率

-xx

所有字符串以十六进制形式输出

-e expr

输出过滤器,通过表达式,可以过滤掉你不想要的输出

        expr是一个表达式,用于控制如何跟踪:[qualifier=][!][valuel[,value2]..

        说明:

        qualifier 只能是traceabbrevverboserawsignalreadwrite其中之一

        value是用来限定的符号或数字

        默认的qualifiertrace

        感叹号是否定符号

        例如:

        -e open等价于-e trace=open,表示只跟踪open调用

        -e trace!=open表示跟踪除了open以外的其他调用

        常见选项:

        -e trace=[set]    只跟踪指定的系统调用

        -e trace=file     只跟踪与文件操作有关的系统调用

        -e trace=process  只跟踪与进程控制有关的系统调用

        -e trace-network  只跟踪与网络有关的系统调用

        -e trace=signal   只跟踪与系统信号有关的系统调用

        -e trace=desc     只跟踪与文件描述符有关的系统调用

        -e trace=ipc      只跟踪与进程通信有关的系统调用

        -e abbrev=[set]   设定strace输出的系统调用的结果集

        -e raw=[set]      将指定的系统调用的参数以十六进制显示

        -e signal=[set]   指定跟踪的系统信号

        -e read=[set]     输出从指定文件中读出的数据

        -e write=[set]    输出写入到指定文件中的数据

-o filename

strace的输出写入文件filename

-p pid

指定要跟踪的进程pid,要同时跟踪多个pid,重复多次p选项即可

-s strsize

指定输出字符串的最大长度,默认32。并没有将文件名视为字符串,默认全部输出

-u username

usemameUIDGID执行所跟踪的命令

procfs

介绍

参考链接:https://juejin.cn/post/7055321925463048228

mtrace

介绍

mtrace是GNU C库(glibc)中的一部分,用来跟踪glibc的标准分配内存函数如malloc,alloc…

使用方式

1)  makefile编译选项添加-g -lmcheck选项

2) 在需要内存泄漏检查的代码的开始调用void mtrace(void) (在mcheck.h中有声明)。mtrace为malloc等函数安装hook, 用于记录内存分配信息。
在需要内存泄漏检查的代码的结束调用void muntrace(void)。注意: 一般情况下不要调用muntrace, 而让程序自然结束. 因为可能有些释放内存代码要到muntrace之后才运行

3) 配置内存检测日志文件输出到和执行文件相同的目录下

setenv("MALLOC_TRACE", "output", 1);

4)程序执行后将output文件导出查看日志信息

5)使用addr2line工具打印出具体内存泄漏位置

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值