一、mtrace原理

  • 函数拦截机制:mtrace 利用 glibc 的内部机制,对 malloc() / calloc() / realloc() / free() 等内存函数进行 hook,记录每一次分配和释放行为。
  • 日志记录:记录会写入 MALLOC_TRACE 环境变量指定的日志文件中,包含:
    • 分配的地址
    • 大小
    • 操作类型(M: malloc, F: free)
    • 调用栈返回地址(可用 addr2line 还原)

二、mtrace定位内存泄漏问题(以gtest测试框架为例)

1、main.cpp中添加mtrace

gtest默认的main文件要删掉src_code/srcs/API_with_gtest.cpp

#include <gtest/gtest.h>
#include <mcheck.h>  // mtrace 所在头文件int main(int argc, char** argv) 
{// 先设置环境变量(可选)设置生成的log地址setenv("MALLOC_TRACE", "./gtest_mtrace.log", 1);// 启动内存追踪mtrace();::testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();muntrace();  // 关闭追踪,写日志
}

2cmake里面添加add_executable(***   main.cpp,编译

注意编译debug版本 set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")

检查mtrace有没有被编进程序 :

  nm ./Api_Test_Tool_ARC_AVM_AutoCalibrate__imageInfo__010 | grep mtrace

3chmod 777  执行程序的目录

chmod 777 /tmp/apitest  保证目录可以被写入

4、执行程序,生成./gtest_mtrace.log

5、用 mtrace 工具分析日志

在 PC 上执行:
mtrace ./Api_Test_Tool ./gtest_mtrace.log

输出:没有free的内存

Memory not freed:

-----------------

           Address     Size     Caller

0x0000000001da5090     0x30  at 0x73fa515c

0x0000000001da5428     0x18  at 0x73fa515c

0x0000000001da5ae0     0x88  at 0x73fa515c

6、用addr2line定位没有解析出来的地址

$ addr2line -e ./ATT/Api_Test_Tool_ARC_AVM_AutoCalibrate__imageInfo__010 0x73fa515c

输出:??:0

🧨 原因 1:地址不属于这个 ELF 的 .text 区段

我们来确认地址 0x73fa515c 是否属于这个 ELF 的 .text 段(即:代码段),如果不在范围内,那说明这个地址来自其他 .so,比如某个算法库。

检查 .text 段地址范围

执行

readelf -Wl ./ATT/Api_Test_Tool_ARC_AVM_AutoCalibrate__imageInfo__010 | grep LOAD

输出:

  LOAD           0x000000 0x00010000 0x00010000 0x100eb8 0x100eb8 R E 0x10000

  LOAD           0x101d90 0x00121d90 0x00121d90 0x008c8 0x00d1c RW  0x10000

程序的 .text 段(可执行代码段)在 虚拟地址范围是:

0x00010000 ~ 0x00010000 + 0x100eb8 ≈ 0x00110eb8

所以这些地址不在可执行程序内

用addressline定位动态库地址参考:Addr2line使用-CSDN博客

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

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

    相关文章

    高校合作 | 世冠科技联合普华、北邮项目入选教育部第二批工程案例

    近日&#xff0c;教育部学位与研究生教育发展中心正式公布第二批工程案例立项名单。由北京世冠金洋科技发展有限公司牵头&#xff0c;联合普华基础软件、北京邮电大学共同申报的"基于国产软件栈的汽车嵌入式软件开发工程案例"成功入选。该项目由北京邮电大学修佳鹏副…

    TOMCAT笔记

    一、前置知识&#xff1a;Web 技术演进 C/S vs B/S – C/S&#xff1a;Socket 编程&#xff0c;QQ、迅雷等&#xff0c;通信层 TCP/UDP&#xff0c;协议私有。 – B/S&#xff1a;浏览器 HTTP&#xff0c;文本协议跨网络。 动态网页诞生 早期静态 HTML → 1990 年 HTTP 浏览…

    上海一家机器人IPO核心零部件依赖外购, 募投计划频繁修改引疑

    作者&#xff1a;Eric来源&#xff1a;IPO魔女8月8日&#xff0c;节卡机器人股份有限公司&#xff08;简称“节卡股份”&#xff09;将接受上交所科创板IPO上会审核。公司保荐机构为国泰海通证券股份有限公司&#xff0c;拟募集资金为6.76亿元。报告期内&#xff0c;节卡股份营…

    Linux810 shell 条件判断 文件工具 ifelse

    变量 条件判断 -ne 不等 $(id -u) -eq [codesamba ~]$ [ $(id -u) -ne 0 ] && echo "the user is not admin" the user is not admin [codesamba ~]$ [ $(id -u) -eq 0] && echo "yes admin" || echo "no not " -bash: [: 缺少 …

    ChatGPT 5的编程能力宣传言过其实

    2025年的8月7日&#xff0c;OpenAI 正式向全球揭开了GPT-5的神秘面纱&#xff0c;瞬间在 AI 领域乃至整个科技圈引发了轩然大波。OpenAI对GPT-5的宣传可谓不遗余力&#xff0c;将其描绘成一款具有颠覆性变革的 AI 产品&#xff0c;尤其在编程能力方面&#xff0c;给出了诸多令人…

    从MySQL到大数据平台:基于Spark的离线分析实战指南

    引言在当今数据驱动的商业环境中&#xff0c;企业业务数据通常存储在MySQL等关系型数据库中&#xff0c;但当数据量增长到千万级甚至更高时&#xff0c;直接在MySQL中进行复杂分析会导致性能瓶颈。本文将详细介绍如何将MySQL业务数据迁移到大数据平台&#xff0c;并通过Spark等…

    Mysql笔记-存储过程与存储函数

    1. 存储过程(Stored Procedure) 1.1 概述 1.1.1 定义&#xff1a; 存储过程是一组预编译的 SQL 语句和控制流语句&#xff08;如条件判断、循环&#xff09;的集合&#xff0c;​无返回值​&#xff08;但可通过 OUT/INOUT 参数或结果集返回数据&#xff09;。它支持参数传递、…

    [论文阅读] 人工智能 + 软件工程 | LLM协作新突破:用多智能体强化学习实现高效协同——解析MAGRPO算法

    LLM协作新突破&#xff1a;用多智能体强化学习实现高效协同——解析MAGRPO算法 论文&#xff1a;LLM Collaboration With Multi-Agent Reinforcement LearningarXiv:2508.04652 (cross-list from cs.AI) LLM Collaboration With Multi-Agent Reinforcement Learning Shuo Liu, …

    使用OAK相机实现智能物料检测与ABB机械臂抓取

    大家好&#xff01;今天我们很高兴能与大家分享来自OAK的国外用户——Vention 的这段精彩视频&#xff0c;展示了他们的AI操作系统在现实中的应用——在演示中&#xff0c;进行实时的自动物料拣选。 OAK相机实时自动AI物料拣选视频中明显可以看到我们的OAK-D Pro PoE 3D边缘AI相…

    html5和vue区别

    HTML5 是网页开发的核心标准&#xff0c;而 Vue 是构建用户界面的JavaScript框架&#xff0c;两者在功能定位和开发模式上有显著差异&#xff1a; 核心定位 HTML5是 HTML标准 的第五次重大更新&#xff08;2014年发布&#xff09;&#xff0c;主要提供网页结构定义、多媒体嵌入…

    【前端八股文面试题】【JavaScript篇3】DOM常⻅的操作有哪些?

    文章目录&#x1f9ed; 一、查询/获取元素 (Selecting Elements)✏️ 二、修改元素内容与属性 (Modifying Content & Attributes)&#x1f9ec; 三、创建与插入元素 (Creating & Inserting Elements)&#x1f5d1;️ 四、删除与替换元素 (Removing & Replacing)&am…

    内存杀手机器:TensorFlow Lite + Spring Boot移动端模型服务深度优化方案

    内存杀手机器&#xff1a;TensorFlow Lite Spring Boot移动端模型服务深度优化方案一、系统架构设计1.1 端云协同架构1.2 组件职责矩阵二、TensorFlow Lite深度优化2.1 模型量化策略2.2 模型裁剪技术2.3 模型分片加载三、Spring Boot内存优化3.1 零拷贝内存管理3.2 堆外内存模…

    安全生产基础知识(一)

    本文档围绕安全生产基础知识展开&#xff1a; 一、安全用电相关知识 用电安全要点 禁止用湿手触摸灯头、开关、插头插座及用电器具。发现有人触电&#xff0c;切勿用手拉扯&#xff0c;应立即拉开电源开关或用干燥木棍、竹竿挑开电线。电器通电后出现冒烟、烧焦味或着火时&…

    Elasticsearch 搜索模板(Search Templates)把“可配置查询”装进 Mustache

    1. 什么是 Search Template&#xff1f;能解决什么问题&#xff1f; 搜索模板是存储在 ES 集群里的 Mustache 模板&#xff08;lang: mustache&#xff09;。你把一份标准 _search 请求体写成模板&#xff0c;变量交给 params&#xff0c;每次调用只需传参即可&#xff1a; 搜索…

    cocos Uncaught TypeError: Cannot read properties of null (reading ‘SetActive‘)

    报错&#xff1a;Uncaught TypeError: Cannot read properties of null (reading SetActive) at b2RigidBody2D.setActive (rigid-body.ts:231:21) at b2RigidBody2D.onEnable (rigid-body.ts:78:14) at RigidBody2D.onEnable (rigid-body-2d.ts:551:24) at OneOffInvoker.invo…

    Docker用户组介绍以及管理策略

    在Docker环境中&#xff0c;用户组&#xff08;尤其是默认的docker组&#xff09;是管理用户与Docker守护进程交互权限的核心机制。以下从概念介绍和具体管理操作两方面详细说明&#xff1a;一、Docker用户组的核心概念 Docker守护进程&#xff08;dockerd&#xff09;默认通过…

    【PyTorch】单目标检测项目部署

    【PyTorch】单目标检测项目 两种部署情况&#xff1a;部署在 PyTorch 数据集上&#xff0c;以及部署在本地存储的单个映像上。 目录 定义数据集 搭建模型 部署模型 定义数据集 详细参照前文【PyTorch】单目标检测项目 import torchvision import os import pandas as pd i…

    Baumer高防护相机如何通过YoloV8深度学习模型实现火星陨石坑的检测识别(C#代码UI界面版)

    《------往期经典推荐------》 AI应用软件开发实战专栏【链接】 序号 项目名称 项目名称 1 1.工业相机 + YOLOv8 实现人物检测识别:(C#代码,UI界面版) 2.工业相机 + YOLOv8 实现PCB的缺陷检测:(C#代码,UI界面版) 2 3.工业相机 + YOLOv8 实现动物分类识别:(C#代码,U…

    UniApp Vue3 TypeScript项目中使用xgplayer播放m3u8视频的显示问题

    问题背景 在UniApp Vue3 TypeScript项目中使用xgplayer播放m3u8视频时&#xff0c;遇到了一个棘手的问题&#xff1a;视频画面下移&#xff0c;只能听到声音&#xff0c;全屏后才能正常显示。经过排查&#xff0c;发现是<video>元素在DOM渲染时被异常定位&#xff0c;导…

    服务器硬件电路设计之 I2C 问答(三):I2C 总线上可以接多少个设备?如何保证数据的准确性?

    在服务器硬件电路设计中&#xff0c;I2C 总线作为常用的串行通信协议&#xff0c;其设备连接数量和数据准确性至关重要。​I2C 总线上可连接的设备数量并非无限制。从理论上讲&#xff0c;标准 I2C 设备采用 7 位地址&#xff0c;除去保留地址&#xff0c;最多可连接 112 个设备…