常用工具-Valgrind简介

Linux内存泄漏工具

简介

详细信息可以查阅官方网站

Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。

安装

ubuntu20.04直接安装,版本为3.15.0

1
apt-get install valgrind

使用

准备程序

需要使用-g将调试信息编译到程序中,以便Memcheck工具输出准确行数。优化参数最好是使用-O0-O1,使用-O2及以上等级或存在错误上报的可能。

Memcheck运行程序

若程序正常运行为

1
myprog arg1 arg2

则使用valgrind运行时

1
valgrind --leak-check=all myprog arg1 arg2

Memcheck工具是默认项。--leak-check选项指定检查项细节。

程序会比正常运行慢一些,并会占用更多的内存。

常见错误检测

  • 内存未释放(definitely/indirectly/possibly lost)
  • 内存越界访问(Invalid read/write)
  • 内存释放后读写(Invalid read/write)
  • 内存错误释放(Mismatched free() / delete / delete [])
  • 内存重复释放(Invalid free() / delete / delete[] / realloc())