Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具

官网:http://valgrind.org/

用户开发手册地址:http://valgrind.org/docs/manual/manual.html

下载安装步骤:

① git clone git@github.com:meihao1203/Valgrind

或:git clone https://github.com/meihao1203/Valgrind

② tar -xvzf valgrind-3.13.0.tar.gz

③ cd valgrind-3.13.0

④ make

⑤ sudo make install

查看是否安装成功:

valgrind --version

显示 valgrind-3.13.0 即为成功

查看帮助:

valgrind --help

Demo小例子
  1. 1 ///
  2. 2 /// @file uninit.cpp
  3. 3 /// @author meihao1203(meihao19931203@outlook.com)
  4. 4 /// @date 2018-07-12 19:59:17
  5. 5 ///
  6. 6
  7. 7 #include<iostream>
  8. 8 using namespace std;
  9. 9 int main(int argc,char** argv)
  10. 10 {
  11. 11 int* arr = new int[5]; //没有释放,内存泄露
  12. 12 return 0;
  13. 13 }
编译:

g++ -g uninit.cpp

使用valgrind调试,显示出详细的内存泄露信息,以及错误发生在哪一行:

valgrind --tool=memcheck --leak-check=full ./a.out

  1. //==18626== Memcheck, a memory error detector
  2. //==18626== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
  3. //==18626== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
  4. //==18626== Command: ./a.out
  5. //==18626==
  6. //==18626==
  7. //==18626== HEAP SUMMARY:
  8. //==18626== in use at exit: 72,724 bytes in 2 blocks
  9. //==18626== total heap usage: 2 allocs, 0 frees, 72,724 bytes allocated
  10. //==18626==
  11. //==18626== 20 bytes in 1 blocks are definitely lost in loss record 1 of 2
  12. //==18626== at 0x4C2E8BB: operator new[](unsigned long) (vg_replace_malloc.c:423)
  13. //==18626== by 0x400717: main (uninit.cpp:11)
  14. //==18626==
  15. //==18626== LEAK SUMMARY:
  16. //==18626== definitely lost: 20 bytes in 1 blocks
  17. //==18626== indirectly lost: 0 bytes in 0 blocks
  18. //==18626== possibly lost: 0 bytes in 0 blocks
  19. //==18626== still reachable: 72,704 bytes in 1 blocks
  20. //==18626== suppressed: 0 bytes in 0 blocks
  21. //==18626== Reachable blocks (those to which a pointer was found) are not shown.
  22. //==18626== To see them, rerun with: --leak-check=full --show-leak-kinds=all
  23. //==18626==
  24. //==18626== For counts of detected and suppressed errors, rerun with: -v
  25. //==18626== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
valgrind --help对应的中文:
  1. 用法: valgrind [options] prog-and-args
  2. [options]: 常用选项,适用于所有Valgrind工具
  3. -tool=<name> 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck
  4. memcheck ------> 这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。
  5. callgrind ------> 它主要用来检查程序中函数调用过程中出现的问题。
  6. cachegrind ------> 它主要用来检查程序中缓存使用出现的问题。
  7. helgrind ------> 它主要用来检查多线程程序中出现的竞争问题。
  8. massif ------> 它主要用来检查程序中堆栈使用中出现的问题。
  9. extension ------> 可以利用core提供的功能,自己编写特定的内存调试工具
  10. -h help 显示帮助信息。
  11. -version 显示valgrind内核的版本,每个工具都有各自的版本。
  12. -q quiet 安静地运行,只打印错误信息。
  13. -v verbose 更详细的信息, 增加错误数统计。
  14. -trace-children=no|yes 跟踪子线程? [no]
  15. -track-fds=no|yes 跟踪打开的文件描述?[no]
  16. -time-stamp=no|yes 增加时间戳到LOG信息? [no]
  17. -log-fd=<number> 输出LOG到描述符文件 [2=stderr]
  18. -log-file=<file> 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
  19. -log-file-exactly=<file> 输出LOG信息到 file
  20. -log-file-qualifier=<VAR> 取得环境变量的值来做为输出信息的文件名。 [none]
  21. -log-socket=ipaddr:port 输出LOGsocket ipaddr:port
  22. LOG信息输出
  23. -xml=yes 将信息以xml格式输出,只有memcheck可用
  24. -num-callers=<number> show <number> callers in stack traces [12]
  25. -error-limit=no|yes 如果太多错误,则停止显示新错误? [yes]
  26. -error-exitcode=<number> 如果发现错误则返回错误代码 [0=disable]
  27. -db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。[no]
  28. -db-command=<command> 启动调试器的命令行选项[gdb -nw %f %p]
  29. 适用于Memcheck工具的相关选项:
  30. -leak-check=no|summary|full 要求对leak给出详细信息? [summary]
  31. -leak-resolution=low|med|high how much bt merging in leak check [low]
  32. -show-reachable=no|yes show reachable blocks in leak check? [no]

Valgrind,内存调试工具的更多相关文章

  1. valgrind 内存调试工具

    一.valgrind 是运行在linux系统下的内存调试工具,支持很多对象:memcheck.addrcheck.cachegrind.Massif.helgrind.Callgrind等.使用val ...

  2. 初试valgrind内存调试工具

    虽然GDB调试工具功能强大,但对于平时做题调试的使用并不方便,这里尝试学习使用比较简单的valgrind工具 Valgrind是一个提供程序调试及性能分析的工具集.其包含的工具主要有Memcheck, ...

  3. valgrind 内存检测与调用图生成

    http://blog.csdn.net/destina/article/details/6198443  感谢作者的分享! 一  valgrind是什么? Valgrind是一套Linux下,开放源 ...

  4. c++Valgrind内存检测工具---19

    原创博文,转载请标明出处--周学伟  http://www.cnblogs.com/zxouxuewei/ 一.Valgrind 概述 Valgrind是一套Linux下,开放源代码(GPL V2)的 ...

  5. Valgrind 内存泄漏工具

    Valgrind 是一款 Linux下(支持 x86.x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和 ...

  6. 内存调试工具Electric Fence

    源码下载地址 注:官方地址下载不了,可能不再维护了,此是一个老项目 efence中相关环境变量控制: 302 /* 303 * See if the user wants to allow mallo ...

  7. Qt Creator Valgrind内存分析前端(分析Nginx内存)

    Linux上使用Qt Creator进行C/C++开发http://my.oschina.net/eechen/blog/166969Qt Creator GDB调试前端(调试Nginx):http: ...

  8. JVM常用启动参数+常用内存调试工具

    一.JVM常用启动参数 -Xms:设置堆的最小值. -Xmx:设置堆的最大值. -Xmn:设置新生代的大小. -Xss:设置每个线程的栈大小. -XX:NewSize:设置新生代的初始值. -XX:M ...

  9. linux下内存调试工具——valgrind

    1.valgrind之memcheck  最常用的工具,用来检测程序中出现的内存问题,所有对内存的读写都会被检测到,一切对malloc()/free()/new/delete的调用都会被捕获.所以,它 ...

随机推荐

  1. POP3、SMTP和IMAP介绍和设置

    什么是POP3.SMTP和IMAP? 参照:http://help.163.com/09/1223/14/5R7P6CJ600753VB8.html 用于 Outlook 的 POP 和 IMAP 电 ...

  2. 几种RAID介绍(总结)

    概念 RAID是Redundent Array of Inexpensive Disks的缩写,简称为“磁盘阵列”.后来RAID中的字母I被改作了Independent,RAID就成了“独立冗余磁盘阵 ...

  3. 如何修改Sublime Text3 的侧边栏字体大小

    如何修改Sublime Text3 的侧边栏字体大小 一.总结 一句话总结:用PackageResourceViewer插件来修改 PackageResourceViewer插件 1.如果Sublim ...

  4. 第一章 Lab

    关于Lab 教材恶意代码分析实战 课后练习恶意代码样本https://practicalmalwareanalysis.com或https://nostarch.com/malware.htm 以下是 ...

  5. 将内网ip映射到外网域名

     一.应用场景 1.在本地测试微信支付回调 二.如何使用natapp实现内网穿透 1.第一步注册账号并进行实名制认证 natapp网站地址 https://natapp.cn/ 2.第二步申请免费隧道 ...

  6. Spring Boot之默认连接池配置策略

    注意:如果我们使用spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa “starters”坐标,Spring Boot将自动配置Hikari ...

  7. 20181014xlVBA获取小题零分名单

    Sub GetZeroName() Dim Dic As Object Const SUBJECT = "科目名称" Dim Key As String Dim OneKey Di ...

  8. android -------- WIFI 详解

    今天简单的来聊一下安卓开发中的Wifi,一些常用的基础,主要分为两部分: 1:WiFi的信息 2:WiFi的搜索和连接 现在app大多都需要从网络上获得数据.所以访问网络是在所难免.但是在访问网络之前 ...

  9. CF1117E Decypher the String

    如果我们能询问一个排列的话,我们就可以得到这个置换,然后反向求解. 但现在字符集只有26. 考虑26^3>1e5. 用一个三维坐标去映射到一个一维整数,然后就可以构造排列了. #include& ...

  10. 【洛谷p1932】A+B A-B A*B A/B A%B Problem

    (emmmm) 这道题成功让我见识到了Dev撤回的高端大气上档(dàng)次. A+B A-B A*B A/B A%B Problem[传送门](真是个优秀的高精) 算法:::::::(模板题弄这么费 ...