mtrace定位內存泄漏問題(僅限 GNU glibc 的 Linux)

一、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 個設備…