0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

内存泄漏检测工具Sanitizer介绍

学益得智能硬件 来源: 学益得智能硬件 2025-03-01 14:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

内存泄漏,我们经常会遇到,如何检测内存泄漏,除了我们之前讲过的 valgrind,还可以使用 gcc 自带的工具 sanitizer。

从 gcc 4.8 开始,sanitizer 就被加入到 gcc 中,使用起来非常方便,可以检测内存泄漏、内存越界、野指针等等。

下面来简单演示下怎么使用。

void leak_memory()
{
    char *ptr = (char *)malloc(128);
}

比如这段代码,一眼看出内存泄漏。

# gcc test.c -o test -g -fsanitize=address

编译的时候加上 -g 选项,方便后续调试,再加上 -fsanitize=address,得到二进制文件。

root@Turbo:~# ./test 


=================================================================
==374040==ERROR: LeakSanitizer: detected memory leaks


Direct leak of 128 byte(s) in 1 object(s) allocated from:
    #0 0x7d41794fd9c7 in malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0x62d90d0dc25e in leak_memory /root/test.c:5
    #2 0x62d90d0dc4e7 in main /root/test.c:43
    #3 0x7d417902a1c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #4 0x7d417902a28a in __libc_start_main_impl ../csu/libc-start.c:360
    #5 0x62d90d0dc184 in _start (/root/test+0x1184) (BuildId: a2e83d98f01d2da94cd327af18f596c19fc367bb)


SUMMARY: AddressSanitizer: 128 byte(s) leaked in 1 allocation(s).
root@Turbo:~#

运行程序,会提示一大堆错误。虽然全是英文,但是阅读起来也没什么难度,只要你有英语三级的水平,应该能发现,内存泄漏了。

再来个代码,栈内存越界访问。

void stack_overflow()
{
    int array[5] = {0};


    array[5] = 1;
}

同样的方法,编译运行,提示栈内存溢出。

至于其他的内存问题,释放不合法的内存、内存被释放了又继续使用、两次释放同一块内存,这些问题统统可以检查。

非常实用的工具,调试代码的时候,可以帮我们节省很多时间。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    9

    文章

    3173

    浏览量

    76120
  • 调试工具
    +关注

    关注

    1

    文章

    53

    浏览量

    12931
  • 内存泄漏
    +关注

    关注

    0

    文章

    40

    浏览量

    9491

原文标题:内存泄漏调试工具Sanitizer

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    煤气泄漏检测系统!毕业设计

    煤气泄漏检测系统!毕业设计,高手请帮忙!
    发表于 03-24 01:48

    如何去解决电信设备内的泄漏检测

    基于电信设备内液体泄漏检测的光电液位传感器用于昂贵和关键系统的低成本泄漏检测解决方案
    发表于 02-23 06:34

    写了一个内存泄漏检工具

    嵌入式环境内存泄漏检查比较麻烦,valgrind比较适合于在pc上跑,嵌入式上首先移植就很麻烦,移植完了内存比较小,跑起来也比较费劲。所以手动写了一个内存
    发表于 12-17 08:25

    使用开源工具Address Sanitize致力于Go工具链的优化和特性的支持

    我们检测此类错误。Address SanitizerAddress Sanitizer(ASan)是一个快速的内存错误检测工具,它可以检测
    发表于 07-11 16:03

    泄漏检测仪校正与调整

    本文概述了泄漏检测仪的基本结构,针对泄漏检测仪出现“误判”故障,在校正及修理调试时采取了相应措施,恢复了泄漏检测仪正常使用功能。
    发表于 01-14 15:29 13次下载

    泄漏检测技术

    从割草机到咖啡机,任何的流体处理设备都需要进行泄漏检测,从而为其投入市场做论证准备。通常,应用在样机设计阶段的泄漏检测方法也是在大批量生产中用于检测的最好方法
    发表于 01-23 12:04 13次下载

    泄漏检测及定位原理

    泄漏检测及定位原理 当管 道 发 生泄漏时,泄漏点处由于管道内外的压差,流体迅速消失,压力下降。泄漏点两边的流体由于存在压差而
    发表于 01-08 11:48 2106次阅读
    <b class='flag-5'>泄漏检测</b>及定位原理

    沼气泄漏检测电路

    沼气泄漏检测电路
    发表于 02-15 13:35 624次阅读
    沼气<b class='flag-5'>泄漏检测</b>电路

    腾讯内部内存泄漏分析工具简析

    精益求精。 链接:wetest.qq.com 工具使用入口 【工具简介】 tMemoryMonitor简称TMM,是一款运行时C/C++内存泄漏检测工具。TMM认为在进程退出时,
    发表于 10-11 15:30 0次下载
    腾讯内部<b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>分析<b class='flag-5'>工具</b>简析

    氨气泄漏的危害_氨气泄漏检测仪怎么使用_氨气泄漏检测仪的使用方法

    氨气泄漏检测仪 氨气泄漏检测仪测量范围:0-100ppm、0-400ppm,声光报警,高防水防尘设计,具有数据存储功能,声光报警。
    发表于 01-03 09:57 3065次阅读

    真空泄漏检测仪的重要性和应用

    真空泄漏检测仪是一种强大的设备,它能够检测和定位系统或部件的微小泄漏。在许多行业中,包括汽车、航空航天、医疗设备和半导体等,这种设备都是必不可少的。下面我们将详细讨论真空泄漏检测仪的重
    的头像 发表于 08-15 09:52 1512次阅读

    基于C++代码实现内存泄漏检测工具

    看到的一个文章,有人用一个很简短的代码实现了内存检测工具,大家看看实用性如何?
    发表于 08-21 10:11 1208次阅读
    基于C++代码实现<b class='flag-5'>内存</b><b class='flag-5'>泄漏检测工具</b>

    如何写一个内存泄漏检测工具

    如何确定有内存泄露问题,如何定位到内存泄露位置,如何写一个内存泄漏检测工具? 1:概述 内存泄露本质:其实就是申请调用malloc/new,
    的头像 发表于 11-11 16:19 1436次阅读

    如何发现内存泄漏

    检测两个角度介绍在 Linux 环境进行内存泄漏检测的方法,并重点介绍静态分析工具 BEAM、动
    的头像 发表于 11-13 15:41 1237次阅读

    如何检测内存泄漏

    检测内存泄漏是软件开发过程中一项至关重要的任务,它有助于识别和解决那些导致程序占用过多内存资源,从而影响程序性能甚至导致程序崩溃的问题。以下将详细阐述几种常见的
    的头像 发表于 07-30 11:50 4504次阅读