当前位置: 首页 > news >正文

Linux 检测内存泄漏方法总结

文章目录

  • strace检测
  • asan内存检测
  • linux下gperf工具(tcmalloc)检查C/C++代码内存泄露问题
  • 参考

strace检测

(1)启动程序

(2)

strace -f -p <PID> -tt -e brk,mmap,mmap2,munmap
  • brk 变大 → 说明堆增长(malloc分配)。
  • mmap 变多但 munmap 没有减少 → 可能是 mmap 泄漏。

类似还有ltrace:

ltrace -p <PID> -e malloc,free,realloc

如果 malloc 数量远大于 free,说明可能有 内存泄漏。

asan内存检测

gcc和clang编译选项:主要是-fsanitize=address

gcc ex1.c -o ex1 -g -fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer -fno-common 

asan会在运行时检测内存问题,运行时需要添加几个环境变量:

ASAN_OPTIONS='detect_leaks=1:halt_on_error=0:alloc_dealloc_mismatch=0:log_path=/tmp/asan_pgsql.log' \
LSAN_OPTIONS='exitcode=0:suppressions=/tmp/asan_supp'
LD_PRELOAD=/usr/local/lib64/libasan.so \
./ex1
  • ASAN_OPTIONS:配置ASAN。
  • LSAN_OPTIONS:配置LSAN,有些LSAN特殊的配置加在这里,比如suppressions忽略一些文件。
  • halt_on_error:出现问题不停止程序运行。
  • alloc_dealloc_mismatch:不允许内存申请不配对的情况,例如malloc / delete。
    l- og_path:结果输出到文件中,不打印到标准输出。
  • exitcode:LSAN的配置,遇到问题不退出。
  • suppressions:LSAN支持不检查一些文件。
  • LD_PRELOAD:二进制可以不link libasan.so,加环境变量LD_PRELOAD即可。或者编译时Link libasan.so,可以省略该配置。

cmake

1. 编译宏添加set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
2. 执行LD_PRELOAD=/usr/lib/gcc/x86_64-linux-gnu/11/libasan.so  ASAN_OPTIONS=halt_on_error=0:detect_leaks=1:malloc_context_size=15:log_path=./asan.log ./program# halt_on_error=0:检测内存错误后继续运行
# detect_leaks=1:使能内存泄露检测
# malloc_context_size=15:内存错误发生时,显示的调用栈层数为15
# log_path=/home/xos/asan.log:内存检查问题日志存放文件路径
# suppressions=$SUPP_FILE:屏蔽打印某些内存错误

tet case

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{void *dst = malloc(8);void *src = "1234567";memcpy(dst, src, 8);printf("%s\n", (char *) dst);return 0;
}

编译

gcc ex1.c -o ex1 -g -fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer -fno-common

执行

ASAN_OPTIONS='halt_on_error=0:alloc_dealloc_mismatch=0:log_path=/tmp/asan_pgsql.log' \
LD_PRELOAD=/usr/local/lib64/libasan.so \
./ex1

结果

$ cat /tmp/asan_pgsql_01.log.652=================================================================
==652==ERROR: LeakSanitizer: detected memory leaksDirect leak of 8 byte(s) in 1 object(s) allocated from:#0 0x7f04db292f08 in __interceptor_malloc ../../../../libsanitizer/asan/asan_malloc_linux.cc:144#1 0x400853 in main /data02/mingjie/pgroot99/pgsrc/test/ex1.c:7#2 0x7f04dabdd554 in __libc_start_main (/lib64/libc.so.6+0x22554)SUMMARY: AddressSanitizer: 8 byte(s) leaked in 1 allocation(s).

linux下gperf工具(tcmalloc)检查C/C++代码内存泄露问题

  • linux下gperf工具(tcmalloc)检查C/C++代码内存泄露问题
  • GDB调试无行号,报dwarf error问题解决

交叉编译linux aarch64:

./configure --host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++  --prefix="$PWD/install"  --enable-frame-pointers make -j10 
make install

参考

  • asan内存检测工具实例

相关文章:

Linux 检测内存泄漏方法总结

文章目录 strace检测asan内存检测linux下gperf工具&#xff08;tcmalloc&#xff09;检查C/C代码内存泄露问题参考 strace检测 &#xff08;1&#xff09;启动程序 &#xff08;2&#xff09; strace -f -p <PID> -tt -e brk,mmap,mmap2,munmapbrk 变大 → 说明堆增长…...

本地部署deepseek大模型后使用c# winform调用(可离线)

介于最近deepseek的大火&#xff0c;我就在想能不能用winform也玩一玩本地部署&#xff0c;于是经过查阅资料&#xff0c;然后了解到ollama部署deepseek,最后用ollama sharp NUGet包来实现winform调用ollama 部署的deepseek。 本项目使用Vs2022和.net 8.0开发&#xff0c;ollam…...

Python----数据分析(Numpy:安装,数组创建,切片和索引,数组的属性,数据类型,数组形状,数组的运算,基本函数)

一、 Numpy库简介 1.1、概念 NumPy(Numerical Python)是一个开源的Python科学计算库&#xff0c;旨在为Python提供 高性能的多维数组对象和一系列工具。NumPy数组是Python数据分析的基础&#xff0c;许多 其他的数据处理库&#xff08;如Pandas、SciPy&#xff09;都依赖于Num…...

Leetcode-最大矩形(单调栈)

一、题目描述 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 输入&#xff1a;matrix [["1","0","1","0","0"],["1","0&…...

域内委派维权

为某个服务账户配置 krbtgt 用户的非约束性委派或基于资源的约束性委派。这里我的 krbtgt 的基于资源约束性委派我利用不了&#xff0c;所以使用的是域控的机器账户 dc01$ 进行维权。 抓取所有 hash。 mimikatz.exe "privilege::debug" "lsadump::dcsync /doma…...

leetcode---LCR 140.训练计划

给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号&#xff0c;请查找并返回倒数第 cnt 个训练项目编号。 示例 1&#xff1a; 输入&#xff1a;head [2,4,7,8], cnt 1 输出&#xff1a;8 提示&#xff1a; 1 < head.length < 1000 < head[i] <…...

Linux基础 -- ARM 32位常用机器码(指令)整理

ARM 32位常用机器码&#xff08;指令&#xff09;整理 1. 数据处理指令&#xff08;运算、逻辑、比较&#xff09; 指令含义示例备注MOV赋值&#xff08;寄存器传输&#xff09;MOV R0, R1直接将 R1 复制到 R0MVN取反MVN R0, R1R0 ~R1ADD加法ADD R0, R1, R2R0 R1 R2ADC带进…...

内存中的缓存区

在 Java 的 I/O 流设计中&#xff0c;BufferedInputStream 和 BufferedOutputStream 的“缓冲区”是 内存中的缓存区&#xff08;具体是 JVM 堆内存的一部分&#xff09;&#xff0c;但它们的作用是优化数据的传输效率&#xff0c;并不是直接操作硬盘和内存之间的缓存。以下是详…...

基于 Spring Boot 的 +Vue“宠物咖啡馆平台” 系统的设计与实现

大家好&#xff0c;今天要和大家聊的是一款基于 Spring Boot 的 “宠物咖啡馆平台” 系统的设计与实现。项目源码以及部署相关事宜请联系我&#xff0c;文末附上联系方式。 项目简介 基于 Spring Boot 的 “宠物咖啡馆平台” 系统设计与实现的主要使用者分为 管理员、用户 和…...

LeetCode 解题思路 7(Hot 100)

解题思路&#xff1a; 初始化窗口元素&#xff1a; 遍历前 k 个元素&#xff0c;构建初始单调队列。若当前索引对应值大于等于队尾索引对应值&#xff0c;移除队尾索引&#xff0c;将当前索引加入队尾。遍历结束时当前队头索引即为当前窗口最大值&#xff0c;将其存入结果数组…...

linux-Dockerfile及docker-compose.yml相关字段用途

文章目录 计算机系统5G云计算LINUX Dockerfile及docker-conpose.yml相关字段用途一、Dockerfile1、基础指令2、.高级指令3、多阶段构建指令 二、Docker-Compose.yml1、服务定义&#xff08;services&#xff09;2、高级服务配置3、网络配置 (networks)4、卷配置 (volumes)5、扩…...

deepseek部署:ELK + Filebeat + Zookeeper + Kafka

## 1. 概述 本文档旨在指导如何在7台机器上部署ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;堆栈、Filebeat、Zookeeper和Kafka。该部署方案适用于日志收集、处理和可视化场景。 ## 2. 环境准备 ### 2.1 机器分配 | 机器编号 | 主机名 | IP地址 | 部署组件 |-…...

微软Office 2016-2024 x86直装版 v16.0.18324 32位

微软 Office 是一款由微软公司开发的办公软件套装&#xff0c;能满足各种办公需求。包含 Word、Excel、PowerPoint、Outlook 和 OneNote 等软件。Word 有强大文档编辑功能和多人协作&#xff1b;Excel 可处理分析大量数据及支持宏编程&#xff1b;PowerPoint 用于制作演示文稿且…...

CMake宏定义管理:如何优雅处理第三方库的宏冲突

在C/C项目开发中&#xff0c;我们常常会遇到这样的困境&#xff1a; 当引入一个功能强大的第三方库时&#xff0c;却发现它定义的某个宏与我们的项目产生冲突。比如&#xff1a; 库定义了 BUFFER_SIZE 1024&#xff0c;而我们需要 BUFFER_SIZE 2048库内部使用 DEBUG 宏控制日志…...

【SpringCloud】Gateway

目录 一、网关路由 1.1.认识网关 1.2.快速入门? 1.2.1.引入依赖 1.2.2.配置路由 二、网关登录校验 2.1.Gateway工作原理 ?2.2.自定义过滤器 2.3.登录校验 2.4.微服务获取用户 2.4.1.保存用户信息到请求头 2.4.2.拦截器获取用户? ?2.5.OpenFeign传递用户 三、…...

Maven入门教程

一、Maven简介 Maven 是一个基于项目对象模型&#xff08;Project Object Model&#xff09;的构建工具&#xff0c;用于管理 Java 项目的依赖、构建流程和文档生成。它的核心功能包括&#xff1a; 依赖管理(Dependency Management)&#xff1a;自动下载和管理第三方库&#x…...

大数据与金融科技:革新金融行业的动力引擎

大数据与金融科技&#xff1a;革新金融行业的动力引擎 在今天的金融行业&#xff0c;大数据与金融科技的结合正在以惊人的速度推动着金融服务的创新与变革。通过精准的数据分析与智能化决策&#xff0c;金融机构能够更高效地进行风险管理、客户服务、资产管理等一系列关键操作…...

Autosar RTE配置-Port Update配置及使用-基于ETAS工具

文章目录 前言Autosar Rte中enableUpdate参数定义ETAS工具中的配置生成代码分析总结前言 在E2E校验中,需要对Counter进行自增,但每个报文周期不一样,导致自增的周期不一样。且Counter应该在收到报文之后才进行自增。基于这些需求,本文介绍使用RTE Port中的参数enableUpdat…...

【AVRCP】深入理解蓝牙音频 / 视频远程控制规范:从基础到应用

AVRCP&#xff08;Audio/Video Remote Control Profile&#xff09;作为蓝牙音频 / 视频控制领域的重要规范&#xff0c;通过其完善的协议架构、丰富的功能分类以及对用户需求的深入考量&#xff0c;为我们带来了便捷、高效的音频 / 视频设备控制体验。无论是在日常生活中的音乐…...

AWS SQS跨账户访问失败排查指南

引言 在使用AWS SQS(Simple Queue Service)时,跨账户访问是常见的业务场景。例如,账户A的应用程序向队列发送消息,账户B的消费者从队列拉取消息。尽管AWS官方文档明确支持此类配置,但在实际应用中,由于权限模型的复杂性,开发者和运维人员常会遇到“策略已配置但无法接…...

OpenClaw多模型切换术:Gemma-3-12b-it与Qwen3-32B混合调用指南

OpenClaw多模型切换术&#xff1a;Gemma-3-12b-it与Qwen3-32B混合调用指南 1. 为什么需要多模型混合调用&#xff1f; 去年我在用OpenClaw自动化处理技术文档时&#xff0c;发现一个有趣现象&#xff1a;当让AI帮我写Python脚本时&#xff0c;Qwen3-32B表现优异&#xff1b;但…...

XPT2046触摸驱动设计与车载嵌入式集成实践

1. XPT2046 触摸控制器驱动技术解析与嵌入式集成实践XPT2046 是一款广泛应用于嵌入式人机交互系统的 12 位逐次逼近型&#xff08;SAR&#xff09;模数转换器&#xff08;ADC&#xff09;&#xff0c;专为四线/五线电阻式触摸屏设计。其核心功能并非独立显示驱动&#xff0c;而…...

FPGA开发必备:Vivado中ILA和FIFO Generator的深度调试指南

FPGA信号捕获与数据流优化&#xff1a;Vivado调试双核实战手册 在FPGA开发中&#xff0c;调试环节往往占据项目周期的40%以上时间。当仿真验证无法复现的硬件异常出现时&#xff0c;如何快速定位信号跳变问题&#xff1f;当数据吞吐遇到瓶颈时&#xff0c;怎样优化存储结构提升…...

Zotero Duplicates Merger:5分钟实现文献库高效整理的终极指南

Zotero Duplicates Merger&#xff1a;5分钟实现文献库高效整理的终极指南 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 还在为学术文献库中…...

基于扩展卡尔曼滤波器(EKF)的PMSM无位置传感器控制优化策略解析

1. 为什么PMSM需要无位置传感器控制&#xff1f; 永磁同步电机&#xff08;PMSM&#xff09;凭借高功率密度、高效率等优势&#xff0c;在电动汽车、工业伺服等领域广泛应用。但传统控制方案依赖机械位置传感器&#xff08;如编码器、旋转变压器&#xff09;&#xff0c;不仅增…...

Ubuntu 20.04下Python调用海康SDK,解决FastAPI与libssl.so.1.1冲突的完整避坑指南

Ubuntu 20.04下Python调用海康SDK与FastAPI的SSL冲突深度解析与工程实践 在物联网和安防系统开发领域&#xff0c;将海康威视设备接入Python后端服务已成为常见需求。但当开发者尝试在Ubuntu 20.04上使用FastAPI框架集成海康SDK时&#xff0c;往往会遭遇一个令人困惑的陷阱——…...

IM023-将PDF文件导出jpg图片到PDF所在目录下

批量将pdf文档每页导出为jpg图片 比如A文件夹下有B、C、D、E....等文件夹&#xff0c;每个文件夹下都有一定的pdf文件&#xff0c;将程序放在A文件夹下&#xff0c;运行程序后会将B、C、D、E....等文件夹下每个pdf文件分别导出为jpg图片&#xff0c;导出的jpg图片命名方式为&am…...

从产品到生态:观远数据的一站式智能分析平台之路

开篇&#xff1a;客户现场的真实发问 上个月在华东某快消头部企业的CIO圆桌会上&#xff0c;负责数字化转型的副总裁问了我一个很尖锐的问题&#xff1a; “你们BI厂商总说一站式&#xff0c;但我前几年买的BI工具&#xff0c;最后要么数据接不上要额外买数仓工具&#xff0c;要…...

QFIL线刷救砖全攻略:遇到EDL模式切换失败怎么办?附详细COM端口排查方法

QFIL线刷救砖实战指南&#xff1a;EDL模式切换失败的系统级解决方案 当你面对安卓设备变砖的紧急状况&#xff0c;线刷往往是最后的救命稻草。但就在这关键时刻&#xff0c;"Download Fail:Switch To EDL Fail"的红色报错突然弹出&#xff0c;那种从希望到绝望的落差…...

Onekey:Steam游戏清单获取的自动化解决方案

Onekey&#xff1a;Steam游戏清单获取的自动化解决方案 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 在游戏资源管理领域&#xff0c;获取和管理Steam游戏清单一直是一项技术门槛较高的任务。…...