内存泄漏检测组件 -- mtrace

news2025/2/24 21:15:31

目录

用mtrace检测内存泄漏

使用addr2line定位代码


C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂

mtrace检测内存泄漏

描述:

        mtrace()函数为内存分配函数安装hook(钩子)函数【malloc()、realloc()、memalign(),free()】。这些hook函数记录有关内存分配和释放的跟踪信息。跟踪信息可用于发现内存泄漏,并尝试释放程序中未分配的内存。

        muntrace()函数禁用mtrace()安装的hook函数,这样就不再为内存分配函数记录跟踪信息。如果mtrace()没有成功安装任何钩子函数,则muntrace()不执行任何操作。

使用第三方库mtrace,它是把所有的malloc和free写到一个文件。

#include <malloc.h>
#include <mcheck.h>
//export MALLOC_TRACE=./mtrace.log
int main() {
    mtrace();
    void *p1 = malloc(10);
    void *p2 = malloc(20);
    void *p3 = malloc(30);
    void *p4 = malloc(40);
    free(p1);
    free(p2);
    free(p4);
    muntrace();
}

使用addr2line定位代码

addr2line -f -e mtrace -a 0x1895450

        Linux下addr2line命令用于将程序指令地址转换为所对应的函数名、以及函数所在的源文件名和行号。当含有调试信息(-g)的执行程序出现crash时(core dumped),可使用addr2line命令快速定位出错的位置。

         如果无法确定文件名或函数名,addr2line将在它们的位置打印两个问号;如果无法确定行号,addr2line将打印0或一个问号。

参数说明:

(1).-a:在函数名、文件名和行号信息之前,以十六进制形式显示地址。

(2).-b:指定目标文件的格式为bfdname。

(3).-C:将低级别的符号名解码为用户级别的名字。

(4).-e:指定需要转换地址的可执行文件名,默认文件是a.out。

(5).-f:在显示文件名、行号信息的同时显示函数名。

(6).-s:仅显示每个文件名(the base of each file name)去除目录名。

(7).-i:如果需要转换的地址是一个内联函数,则还将打印返回第一个非内联函数的信息。

(8).-j:读取指定section的偏移而不是绝对地址。

(9).-p:使打印更加人性化:每个地址(location)的信息都打印在一行上。

(10).-r:启用或禁用递归量限制。

(11).--help:打印帮助信息。

(12).--version:打印版本号。

 

 

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

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

相关文章

Python语言零基础入门教程(十九)

Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。 1、异常处理 2、断言(Assertions) python标准异常 什么是异常&#xff1f; 异常即是一个事件&#xff0c;该事件会在程序执行过程中发生&…

【原创】java+jsp+servlet学生信息管理系统(jdbc+ajax+filter+cookie+分页)

一直想写一个比较基础的JavaWeb项目&#xff0c;然后综合各种技术&#xff0c;方便Java入门者进行学习。学生信息管理系统大家一般接触的比较多&#xff0c;那么就以这个为例来写一个基础项目吧。 需求分析&#xff1a; 使用jspservletmysql开发的学生信息管理系统&#xff0…

Git 基本操作之Git GUI界面和git命令行如何选择

1. 为啥推荐使用git命令行 我发现公司有很多的同事都喜欢使用git的GUI界面工具&#xff0c;喜欢鼠标点点点就完成了代码的提交&#xff0c;这种方式的确是比较简单便捷&#xff0c;但是却存在风险。先上一个事故给大家醒醒脑。 VScode Git 界面操作引发的惨案 上面的惨案是VS…

抖音共创是什么?怎么操作全集教程!

抖音共创是什么&#xff1f;怎么操作全集教程&#xff01;#抖音合集#抖音共创#抖音seo &#xff0c; 开通抖音合集功能的好处 #抖音合集怎么弄 #抖音合集创建指南 #抖音合集功能 #抖音seo 抖音合集的功能真的是太有用了&#xff0c;视频播放量低的&#xff0c;没有搜索流量的…

深度解析UG二次开发装配的部件事件、部件原型和部件实例

做UG二次开发快一年了&#xff0c;每次遇到装配的问题涉及到部件事件、部件原型和部件实例还是一头雾水&#xff0c;什么是实例&#xff0c;什么是原型这些专业术语等等。 针对这个问题&#xff0c;今天专门写了一篇特辑&#xff0c;结合装配实例深度剖析装配过程中的的所有参数…

chatgpt聊天时都有过哪些高情商回答?

这篇文章主要介绍了chatpartner&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 1、chatGPT是什么意思&#xff1f; ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天…

这样羞辱?6年测开经验去面试阿里,被按在地上疯狂摩擦...

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了快6年软件测试员。。。为了进大厂&#xff0c;也花了很多时间和精力在面试准备上&#xff0c;也刷了很多题。但题刷多了之后有点怀疑人生&#xff0c;不知道刷的这些题在之后的工作中能不能用到&…

入行测试已经4年了 ,进华为后迷茫了3个月,做完这个项目我决定离职....

转行测试 我是大专非计科&#xff0c;我转行之前从事的工作是商场管理&#xff0c;努力了4年左右的时间才做到楼层经理&#xff0c;但是工资太低并且事情太多&#xff0c;薪资才6K。 更多的是坚定了自己的想法&#xff0c;我要改变自己 恰好有几个大学同学在互联网公司工作&a…

MyBatis 多表关联查询

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【测试工程师面试】详细记录 自己的一次面试

【测试工程师面试】详细记录 自己的一次面试 目录&#xff1a;导读 Linux基础 Oracle基础 编程基础 测试的基础 面试的问题 扯闲话部分&#xff1a; 10点刚到&#xff0c;先进行笔试&#xff0c;笔试的题目很基础&#xff0c;涉及到linux&#xff0c;涉及到oracle数据库…

【python百炼成魔】python运算符的使用与输入输出函数

文章目录前言一. python 运算符1.1 算术运算符1.2 .赋值运算符1.3 比较运算符1.4. 布尔运算符二. 输入和输出函数2.1 print函数2.1.1 help函数查看帮助文档2.1.2 print的格式化输出2.2 format函数2.3 input数据接收函数写在最后前言 Python 中的运算符主要分为算术运算符、比较…

HydroD 实用教程(三)环境数据

目 录一、前言二、Location三、Wind Profile四、Directions五、Water5.1 Wave Spectrums5.2 Current Profile5.3 Frequency Set5.4 Phase Set5.5 Wave Height5.6 Regular Wave Set六、参考文献一、前言 SESAM &#xff08;Super Element Structure Analysis Module&#xff09;…

MySQL获取当前时间的各种方式

1 获取当前完整时间1.1 now()函数select now();输出:2023-02-15 10:46:171.2 sysdate()函数select sysdate();输出:2023-02-15 10:47:131.3 current_timestamp或current_timestamp()current_timestamp和current_timestamp()函数的效果是一样的&#xff0c;只不过一个是关键字&a…

“深度学习”学习日记。--ImageNet、VGG、ResNet

2023.2.14 一、小历史&#xff1a; 在2012年的ILSVRC(ImageNet Large Scale Visual Recognitoin Chanllege)&#xff0c;基于深度学习的方法AlexNet 以绝对优势获胜并且他颠覆了以前的图片识别方法&#xff0c;此后深度学习方法一直活跃在这个舞台。 二、ImageNet&#xff1…

10款让程序员用了会上瘾的工具

程序员必定会爱上的10款工具&#xff0c;相信肯定有不少是你的心头好&#xff0c;尤其是第4款。 第一款&#xff1a;TrueCryptTrueCrypt 可能很多人没用过&#xff0c;它是一个加密软件&#xff0c;能够对磁盘进行加密。还在担心自己电脑中的重要文件、私密档案被人查看&…

密码技术在车联网安全中的应用与挑战

随着智慧交通和无人驾驶的快速发展&#xff0c;车联网产业呈现蓬勃发展态势&#xff0c;车与云、车与车、车与路、车与人等综合网络链接的融合程度越来越高&#xff0c;随之而来的安全挑战也更加严峻。解决车联网的安全问题需要一个整体的防护体系&#xff0c;而密码技术凭借技…

深度理解机器学习17-候选激活函数

深度理解机器学习17-候选激活函数 ​ 替换先前时间步长激活函数的候选激活函数&#xff0c;也在每个时间步长中计算。顾名思义&#xff0c;候选激活函数代表下一个时间步长激活函数应该采用的替代值。 ​ 计算候选激活函数的表达式&#xff1a; ​ 从数学上讲&#xff0c;更…

chatgpt系列文章-23.2.15(主要还在发现chatgpt的不足,偏探索,像报告)

Will ChatGPT get you caught? Rethinking of Plagiarism Detection 推荐指数&#xff1a;2 主要内容 文章主要是研究chatgpt出现后&#xff0c;在学术界中可能出现的学术抄袭和剽窃现象。 这篇文章就比较了几种剽窃抄袭软件&#xff0c;来测试是否能够识别chatgpt编写的内…

软考中级-程序设计语言

&#xff08;1&#xff09;解释器解释源程序时不生成独立的目标代码&#xff0c;源程序和解释程序都参与到程序执行中。&#xff08;2&#xff09;编译器编译时生成独立的目标代码&#xff0c;运行时是运行与源程序等价的目标程序&#xff0c;源程序不参与执行。阶段补充&#…

如何选择最佳的 Node.js Docker 镜像

前言 选择一个Node.js的Docker镜像看起来像是一件小事&#xff0c;但是镜像的大小和潜在漏洞可能会对你的CI/CD流程和安全造成重大的影响。那我们如何选择一个最好Node.js Docker镜像呢&#xff1f;我们在使用FROM node:latest或只是FROM node时&#xff0c;很容易忽略他潜在的…