Linux 内存泄漏检查工具 valgrind
抄自《从零开始的JSON库教程》,先mark一下,以后再慢慢研究。
======== 引用分割线 ========
在 Linux、OS X 下,我们可以使用 valgrind 工具(用 apt-get install valgrind、 brew install valgrind)。我们完全不用修改代码,只要在命令行执行:
$ valgrind --leak-check=full ./leptjson_test
$ valgrind --leak-check=full ./leptjson_test ==22078== Memcheck, a memory error detector ==22078== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==22078== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==22078== Command: ./leptjson_test ==22078== --22078-- run: /usr/bin/dsymutil "./leptjson_test" 160/160 (100.00%) passed ==22078== ==22078== HEAP SUMMARY: ==22078== in use at exit: 27,728 bytes in 209 blocks ==22078== total heap usage: 301 allocs, 92 frees, 34,966 bytes allocated ==22078== ==22078== 2 bytes in 1 blocks are definitely lost in loss record 1 of 79 ==22078== at 0x100012EBB: malloc (in /usr/local/Cellar/valgrind/3.11.0/lib/valgrind/vgpreload_memcheck-amd64-darwin.so) ==22078== by 0x100008F36: lept_set_string (leptjson.c:208) ==22078== by 0x100008415: test_access_boolean (test.c:187) ==22078== by 0x100001849: test_parse (test.c:229) ==22078== by 0x1000017A3: main (test.c:235) ==22078==
它发现了在 test_access_boolean() 中,由 lept_set_string() 分配的 2 个字节("a")泄漏了。
Valgrind 还有很多功能,例如可以发现未初始化变量。我们若在应用程序或测试程序中,忘了调用 lept_init(&v),那么v.type 的值没被初始化,其值是不确定的(indeterministic),一些函数如果读取那个值就会出现问题:
static void test_access_boolean() {lept_value v;/* lept_init(&v); */lept_set_string(&v, "a", 1);... }
这种错误有时候测试时能正确运行(刚好 v.type 被设为 0),使我们误以为程序正确,而在发布后一些机器上却可能崩溃。这种误以为正确的假像是很危险的,我们可利用 valgrind 能自动测出来:
$ valgrind --leak-check=full ./leptjson_test ... ==22174== Conditional jump or move depends on uninitialised value(s) ==22174== at 0x100008B5D: lept_free (leptjson.c:164) ==22174== by 0x100008F26: lept_set_string (leptjson.c:207) ==22174== by 0x1000083FE: test_access_boolean (test.c:187) ==22174== by 0x100001839: test_parse (test.c:229) ==22174== by 0x100001793: main (test.c:235) ==22174==
它发现 lept_free() 中依靠了一个未初始化的值来跳转,就是 v.type,而错误是沿自 test_access_boolean()。
编写单元测试时,应考虑哪些执行次序会有机会出错,例如内存相关的错误。然后我们可以利用 TDD 的步骤,先令测试失败(以内存工具检测),修正代码,再确认测试是否成功。
转载于:https://www.cnblogs.com/myjhaha/p/9475407.html
Linux 内存泄漏检查工具 valgrind相关推荐
- Linux内存泄漏检测工具 Valgrind使用
一 .valgrind简介 最近在Linux下程序碰到了内存泄漏的问题,所以在网上找了找Linux下的内存泄漏检测工具,找到了Valgrind这款功能很强大的内存调试.内存泄漏检测以及性能分析.检测线 ...
- Linux 内存泄漏检测工具 Valgrind
Valgrind 是一款 Linux下(支持 x86.x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和 ...
- linux c 代码分析工具,编程达人 分享几款Linux 下C/C++程序内存泄漏检查工具
1.内存管理是否正确(因为这个程序本身开辟很多内存空间进行缓存管理,同时这个程序程序本身就是基于C/C++开发的,内存管理机制一直是程序员头痛的东西) 2.程序的健硕性如何(服务器任何程序的基本要求就 ...
- Linux 下几款程序内存泄漏检查工具
Linux 下几款程序内存泄漏检查工具 chenyoubing | 发布于 2016-07-23 10:08:09 | 阅读量 93 | 无 写这篇博客的原因呢是因为自己在编写基于Nginx磁盘缓存管 ...
- 常用的内存泄漏检查工具
以下是一些常用的内存泄漏检查工具: 1. Valgrind:Valgrind是一种开源的内存调试和性能分析工具,可以检测内存泄漏.使用未初始化的内存.使用已释放的内存等问题. 2. AddressSa ...
- C++ 内存泄漏检测工具valgrind简单使用
C++ 内存泄漏检测工具valgrind简单使用 目录 C++ 内存泄漏检测工具valgrind简单使用 valgrind安装 valgrind测试内存泄漏 valgrind安装 通过软件商店下载: ...
- 【安装配置】安装适用于 Linux 的 Windows 子系统 WSL ,完成 Clion 中对内存泄漏检测工具 Valgrind 的配置,亲测可用
关键词:[Linux] [WSL] [Clion] [Valfrind] 一.前言 今天在回答一个粉丝的评论(关于C++ delete 和 delete[ ])时,引出上面的系列问题,具体流程如下: ...
- C/C++的内存泄漏检测工具Valgrind memcheck的使用经历
Linux下的Valgrind真是利器啊(不知道Valgrind的请自觉查看参考文献(1)(2)),帮我找出了不少C++中的内存管理错误,前一阵子还在纠结为什么VS 2013下运行良好的程序到了Lin ...
- Linux:内存泄漏检测工具--Valgrind
在写大型C/C++工程时难免会发生内存泄漏现象,系统编程中一个重要的方面就是有效地处理与内存相关的问题.你的工作越接近系统,你就需要面对越多的内存问题.有时这些问题非常琐碎,而更多时候它会演变成一个调 ...
- 内存泄漏检测工具valgrind神器
1.1 介绍 Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个框架(framewor ...
最新文章
- Tesla AutoPilot纯视觉方案解析
- cvelist.jsp
- HTTP Server开发相关学习资料整理推介
- 管理SharePoint中的账号的密码
- 【错误记录】Android Studio 4.2.1 编译报错 ( Kotlin 版本推荐设置 1.5.0 )
- cpu真实占用率检測工具
- ng-repeat part1 - how UI is rendered from {{name}} to actual value
- 解决内网搭建本地yum仓库。
- 将旧对象装箱可自动关闭
- 最适合开发VR游戏大作的游戏引擎——Unity
- vsftp客户端_vsftp 如何登陆?
- Echarts Y轴min显示奇葩问题(做此记录)
- 开关电源和家电电源常用电磁兼容(EMC)执行标准
- android 断点下载的实现,自己动手实现一个Android断点下载
- fpga驱动步进电机转动指定角度_通过PLC实现步进电机定位控制的方法
- 经典前端框架,一个时代的落幕:如何看待layui 官网将于 2021年10月13日 进行下线?
- linux 的vim快速查找内容
- 【学习笔记】语义分割综述
- Contrastive Learning Rivals Masked Image Modeling in Fine-tuning via Feature Distillation
- 数据库面试题(SQL语句)
热门文章
- 拓端tecdat|stata对包含协变量的模型进行缺失值多重插补分析
- Linux中配置pacman镜像源(manjaro)
- 7-110 自动售货机 (30 分)
- docker安装mysql并配置文件_Docker安装mysql,并自定义my.cnf
- ajax无法访问,Ajax不能跨域访问的解决方案
- Ubuntu系统备份和还原,从此避免系统重装
- Caffe学习:使用pycaffe绘制loss、accuracy曲线
- Process finished with exit code 0 报错解决方法
- springboot 优雅停机_Spring Boot 程序的优雅停机[译文]
- 网站后台开发 java_Java前后台开发