asan检测内存泄漏

news2025/4/22 16:33:06

文章目录

  • 前言
  • 初始代码
  • 链接asan动态库
  • 静态方式链接
  • 额外说明
  • 小结

前言

ASAN是一个内存问题检测工具
类似的还有valgrind, 但是valgrind运行时会占用非常多的内存

初始代码

#include<stdio.h>
#include"arcojson.h"

int leak_func()
{
    arco_json* jtest = new_json_object();
    json_object_add(jtest, "name", new_json_string("arco~"));
    printf("%s\n", json_to_string(jtest));
}

int main()
{
    leak_func();
    return 0;
}

初始CMakeLists.txt

project(asantest)
cmake_minimum_required(VERSION 3.16)
add_executable(asantest main.c arcojson.c)

这个arcojson.c来源于另一篇文章,是一个简单的c json库
https://blog.csdn.net/weixin_44919664/article/details/136113774

暂时还没有链接asan库
编译运行, 输出

./asantest
{"name":"arco~"}

链接asan动态库

更改CMakeLists.txt

project(asantest)
cmake_minimum_required(VERSION 3.16)
add_executable(asantest main.c arcojson.c)
set_target_properties(asantest PROPERTIES LINK_FLAGS "-Wl,-rpath,.:./lib:/lib64 -fsanitize=address -fno-omit-frame-pointer -fsanitize-recover=all")
target_link_libraries(asantest asan)

注意:-Wl,-rpath之间没有空格

参数说明:我使用的是CMake,Makefile原理也一样, 就是增加gcc的编译选项
-static-libasan 用于链接asan的静态库
-fsanitize=address 检测各种内存错误
同类参数:leak undefined thread memory dataflow
-fno-omit-frame-pointer:保留函数调用栈指针,用于asan更准确的定位错误位置
-fsanitize-recover=all:检测到错误时继续运行
(只检测内存泄漏的话可以用lsan

编译运行: 这将直接在控制台上打印检测信息

也可以导出环境变量
export LSAN_OPTIONS=“verbosity=1:log_threads=1:log_path=/home/asan.log:print_cmdline=1:log_exe_name=1”
这将把输出记录在日志文件里
在这里插入图片描述

静态方式链接

我记录这篇文档用的是本地环境,但实际开发的时候用的是交叉编译环境,还需要拷贝asan库到运行环境上
因此也试了一下链接静态库的方式

# 动态库大小26k
-rwxr-xr-x 1 root root  26K  77 16:58 asantest
# 静态库大小
-rwxr-xr-x 1 root root 1.4M  77 17:04 asantest

更改CMAke

project(asantest)
cmake_minimum_required(VERSION 3.16)
add_executable(asantest main.c arcojson.c)
set_target_properties(asantest PROPERTIES LINK_FLAGS "-Wl,-rpath,.:./lib:/lib64 -fsanitize=address -fno-omit-frame-pointer -fsanitize-recover=all")
target_link_libraries(asantest asan)

重新编译运行
输出和环境变量同动态库

额外说明

还有个ASAN option但我不确定是干啥的

export ASAN_OPTIONS="halt_on_error=0:use_sigaltstack=0:detect_leaks=1:symbolize=1:malloc_content_size=15:log_path=/home/asan.log:print_cmdline=1:log_exe_name=1"

如果环境上没有ASAN库, 是拷贝来的, 那么运行时还要在终端上导出LD_PRELOAD环境变量(预加载库路径)

export LD_PRELOAD=/xxx/libasan.so.4

小结

个人觉得,内存检测工具也就图一乐,内存泄漏根本无法解决
自己写的代码检查下还行,公司里我负责的模块(约50w行代码)内存泄漏遍地,用asan和valgrind愣是扫不出来

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

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

相关文章

复兴社在李忠平的引领下,奋力实现伟大复兴

李忠平&#xff0c;河北保定人&#xff0c;1965年6月生&#xff0c;现任中国财政科学研究院公共资产研究中心副主任副研究员和复兴社会长。他的一生充满了奋斗与奉献&#xff0c;为实现共同富裕和中华民族的伟大复兴而不断努力。复兴社在他的领导下&#xff0c;正走在一条坚定而…

【Python】已解决:SyntaxError invalid syntax

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;SyntaxError invalid syntax 一、分析问题背景 在Python编程中&#xff0c;SyntaxError: invalid syntax是一个常见的错误&#xff0c;它通常表示代码中存在语法…

【机器学习】必会数学知识:一文掌握数据科学核心数学知识点(下),收藏~

核心数学知识点 1、引言2、数据科学必会数学知识2.13 K均值聚类2.14 决策树2.15 随机森林2.16 梯度下降2.17 随机梯度下降&#xff08;SGD&#xff09;2.18 卷积2.19 拉普拉斯变换2.20 傅里叶变换2.21 信息论2.22 时间序列分析2.23 生成模型与判别模型2.24 支持向量机&#xff…

无刷电机带上驱动器,掉电外力拖动有阻力

无刷电机带上驱动器&#xff0c;掉电外力拖动有阻力 这个问题一直以为很好理解或者应该是总所周知的&#xff0c;但是竟然很多人好奇问专门做电机控制的工程师&#xff0c;但是竟然很多人说不明白&#xff0c;今天我就好好聊一聊。 原因 反电动势效应 当无刷电机在没有电源供…

市场营销新手入门:推荐5本让你快速成长的好书!

我过去面试过数千人&#xff0c;发现了一个非常有趣也让人担忧的现象&#xff1a; 无论是资深还是资浅的市场营销人士&#xff0c;如果被问及什么是市场营销&#xff0c;什么是品牌&#xff0c;什么是整合营销传播&#xff0c;市场营销组合与整合营销传播有什么区别&#xff0…

HippoRAG如何从大脑获取线索以改进LLM检索

知识存储和检索正在成为大型语言模型(LLM)应用的重要组成部分。虽然检索增强生成(RAG)在该领域取得了巨大进步&#xff0c;但一些局限性仍然没有克服。 俄亥俄州立大学和斯坦福大学的研究团队推出了HippoRAG&#xff0c;这是一种创新性的检索框架&#xff0c;其设计理念源于人类…

matlab数值溢出该怎么解决?

&#x1f3c6;本文收录于《CSDN问答解惑》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

Backend - C# 的日志Lognet4

目录 一、安装 log4net 插件 &#xff08;一&#xff09;作用 &#xff08;二&#xff09;操作 &#xff08;三&#xff09;注意 二、配置 &#xff08;一&#xff09;配置AssemblyInfo.cs &#xff08;二&#xff09;配置log4net.config 1. 创建log4net.config文件&#xff08…

【京东监控项目分享】JD电商可实现的商品价格SKU实时监控

笔者实现了一个京东商品价格和评论的采集监控系统&#xff0c;它具有以下功能。 可以在任意时间周期内按照一定时间间隔&#xff0c;采集任意指定商品的价格和最新评论&#xff0c;都是网页可见的公开数据&#xff0c;不包含任何隐私数据。 对于消费者来说&#xff0c;如果订阅…

《C++20设计模式》策略模式

文章目录 一、前言二、实现1、UML类图2、实现 一、前言 策略模式和状态模式实现方式一样&#xff0c;只是目的不同&#xff0c;如果会状态模式的这个也就可以随便看看啦。 相关代码可以在这里&#xff0c;如有帮助给个star&#xff01;AidenYuanDev/design_patterns_in_moder…

RocketMQ-六大场景实操指南

RocketMQ-六大场景实操指南 普通消息创建Topic创建Group测试消息收发 定时消息创建Topic创建Group消息发送 事务消息创建Topic创建Group消息收发 顺序消息创建Topic创建Group消息收发 另外两大场景消息异常运维体验感受初次体验给小白新手的建议进阶体验应用场景 关于云消息队列…

Excel第28享:如何新建一个Excel表格

一、背景需求 小姑电话说&#xff1a;要新建一个表格&#xff0c;并实现将几个单元格进行合并的需求。 二、解决方案 1、在电脑桌面上空白地方&#xff0c;点击鼠标右键&#xff0c;在下拉的功能框中选择“XLS工作表”或“XLSX工作表”都可以&#xff0c;如下图所示。 之后&…

持安科技CEO何艺荣获中国信通院2023-2024年度标准卓越贡献奖

近日&#xff0c;由中国信息通信研究院、中国通信标准化协会承办的“全球数字经济大会—云和软件安全论坛”暨“2024第二届SecGo云和软件安全大会”胜利召开&#xff0c;零信任办公安全技术创新企业持安科技创始人兼CEO何艺获评为2023-2024年度零信任领域标准卓越贡献者。 由中…

华盈生物获得美国Akoya认证的PhenoCycler-Fusion(原CODEX)技术服务商

华盈生物获得美国Akoya认证的PhenoCycler-Fusion&#xff08;原CODEX&#xff09;技术服务商 华盈生物获得美国Akoya公司认证的PhenoCycler-Fusion&#xff08;原CODEX&#xff09;空间单细胞蛋白组技术服务商&#xff0c;并进入该技术的全球CRO服务提供者网络&#xff1a;htt…

获超九成Gartner用户力推!FortiGate连续五年斩获“客户之选”称号

近日&#xff0c;Gartner Peer Insights™ 网络防火墙客户之选报告发布&#xff0c;Fortinet 连续第五年荣登这项权威榜单。该评选结果源于广大用户对 Fortinet 防火墙产品的真实反馈&#xff0c;是客户选择 Fortinet 的重要参考依据&#xff0c;也是FortiGate能够占据全球防火…

Spark-RDD和共享变量

概览 每个Spark应用程序都由一个driver program 组成&#xff0c;该驱动程序运行我们编写的main函数&#xff0c;并在集群上执行各种 并行 操作。Spark提供的主要抽象是一个 弹性分布式数据集&#xff08;RDD&#xff09;&#xff0c;它是一个跨集群节点分区的元素集合&#x…

Win-ARM联盟的端侧AI技术分析

Win-ARM联盟&#xff0c;端侧AI大幕将起 微软震撼发布全球首款AI定制Windows PC——Copilot PC&#xff0c;搭载全新NPU与重塑的Windows 11系统&#xff0c;纳德拉盛赞其为史上最快、最强、最智能的Windows PC。该设备算力需求高达40TOPS&#xff0c;支持语音翻译、实时绘画、文…

AI网络爬虫019:搜狗图片的时间戳反爬虫应对策略

文章目录 一、介绍二、输入内容三、输出内容一、介绍 如何批量爬取下载搜狗图片搜索结果页面的图片?以孙允珠这个关键词的搜索结果为例: https://pic.sogou.com/pics? 翻页规律如下: https://pic.sogou.com/napi/pc/searchList?mode=2&start=384&xml_len=48&am…

基于Android平台开发,天气预报APP

1.项目功能思维导图 2. 项目涉及到的技术点 数据来源&#xff1a;和风天气API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现未来7天列表展示和天气指数使用PopupMenu 实现弹出选项框使用动画定时器实现欢迎页倒计时和logo动画使用Text…

常见的过压保护芯片、过压保护的基本参数和选型

过压保护也叫过电压保护&#xff0c;是当电压超过预定的最大值时&#xff0c;使电源断开或使受控设备电压降低的一种保护方式。 过压保护芯片是为了防止输入电压的时候浪涌和波纹过大&#xff0c;导致烧坏后面的元器件芯片。因此过压保护芯片是很有必要的芯片。 常见的过压保护…