linux代码检测工具valgrind之内存检测memcheck

1、安装命令:

$ sudo apt-get install valgrind

安装成功如下:

linux代码检测工具valgrind之内存检测memcheck_第1张图片

 检测版本命令:$ valgrind --version 

2、valgrind检测工具tool介绍

(1)Memcheck是一个内存错误检测器。

(2)Cachegrind是缓存和分支预测分析器。

(3) Callgrind检查程序函数调用过程出现问题的工具。

(4) Helgrind是检测多线程程序出现错误的工具。

 常用的检测工具有上面几个,本文安装的工具如下:

3、内存检测工具memcheck用法

使用命令:

//方法1: 直接输出到控制台
valgrind --tool=memcheck --leak-check=full ./test //test为程序名

//方法2: 重定向到文件中log.txt中
valgrind --tool=memcheck --log-file=./log.txt  --leak-check=full  ./test 

demo

#include 
using namespace std;

int main()
{
    cout << "Hello World!" << endl;

    {
    char* pSubject = new char[1*1024];
    }
    return 0;
}

 使用检测工具memcheck检测结果如下:

linux代码检测工具valgrind之内存检测memcheck_第2张图片

结果分析:

 上面画线地方可以看到内存泄漏1024字节,代码在main.cpp的第10行。

官网对上面泄漏总结分类解释如下:

  • “definitely lost” means your program is leaking memory – fix those leaks!
  • “indirectly lost” means your program is leaking memory in a pointer-based structure. (E.g. if the root node of a binary tree is “definitely lost”, all the children will be “indirectly lost”.) If you fix the “definitely lost” leaks, the “indirectly lost” leaks should go away.
  • “possibly lost” means your program is leaking memory, unless you’re doing unusual things with pointers that could cause them to point into the middle of an allocated block; see the user manual for some possible causes. Use --show-possibly-lost=no if you don’t want to see these reports.
  • “still reachable” means your program is probably ok – it didn’t free some memory it could have. This is quite common and often reasonable. Don’t use --show-reachable=yes if you don’t want to see these reports.
  • “suppressed” means that a leak error has been suppressed. There are some suppressions in the default suppression files. You can ignore suppressed errors.

可以看出绝对丢失的“definitely lost”必须需要修复。间接丢失“indirectly lost“,如果修复了绝对丢失,则间接丢失应该消失。

附加知识:

1、官网知识:Valgrind Home

2、linux valgrind 安装和使用_Zhongyl_的博客-CSDN博客 

3、valgrind基本功能介绍、基础使用方法说明_valgrind 使用_HNU Latecomer的博客-CSDN博客

4、valgrind和vgdb使用:valgrind可以输出部分报告而无需退出配置文件应用程序吗?_RyanLeiWang的博客-CSDN博客 

你可能感兴趣的:(工作软件,linux,linux,ubuntu,运维)