【调试】Linux下超强内存检测工具Valgrind

内容简介


  1. Valgrind是什么?
  2. Valgrind的使用
  3. Valgrind详细教程

1. Valgrind是什么?


Valgrind是一套Linux下,开放源代码(GPL
V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。

内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。

Valgrind的体系结构如下图所示:

Valgrind包括如下一些工具:

  • Memcheck:这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。

  • Callgrind:它主要用来检查程序中函数调用过程中出现的问题。

  • Cachegrind:它主要用来检查程序中缓存使用出现的问题。

  • Helgrind:它主要用来检查多线程程序中出现的竞争问题。

  • Massif:它主要用来检查程序中堆栈使用中出现的问题。

  • Extension:可以利用core提供的功能,自己编写特定的内存调试工具。

2. Valgrind的使用

为了使valgrind发现的错误更精确,如能够定位到源代码行,建议在编译时加上-g参数,编译优化选项请选择O0,虽然这会降低程序的执行效率。

这里用到的示例程序文件名为:test.c,选用的编译器为gcc。

生成可执行程序

gcc -g -O0 test.c -o test

生成可执行程序test之后,如何使用Valgrind来生成内存的记录文件呢?一般这样使用:

valgrind --leak-check=full --log-file=test_valgrind.log --num-callers=30 ./test
  • --log-file 后面的test_valgrind.log是指定生成的日志文件名称。

  • --num-callers 后面的60是生成的每个错误记录的追踪行数。30是随便设定的,如果没指定,默认是12行貌似(有可能有的追踪行就没显示)。

  • --leak-check=full 表示开启详细的内存泄露检测器。

3. Valgrind详细教程

详细教程请看这篇文章:
应用Valgrind发现Linux程序的内存问题


我是谢恩铭,在法国巴黎奋斗的嵌入式软件工程师。
目前工作是Android嵌入式和app开发。
热爱生活,喜欢游泳,略懂烹饪。

【调试】Linux下超强内存检测工具Valgrind的更多相关文章

  1. C/C++内存检测工具Valgrind

    内存检测Valgrind简介 Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,作者是获得过Google-O'Reilly开源大奖的Julian Seward, 它包含一个内核 ...

  2. c程序内存检测工具 - Valgrind

    常用C程序内存泄露检测工具 https://blog.csdn.net/u012662731/article/details/78652651

  3. 内存检测工具valgrind

    valgrind --tool=memcheck --leak-check=full --error-limit=no  --trace-children=yes  ./server valgrind ...

  4. Yosimite10.10(Mac os)安装c/c++内存检测工具valgrind

    1.下载支持包m4-1.4.13.tar.gz $ curl -O http://mirrors.kernel.org/gnu/m4/m4-1.4.13.tar.gz 2. 解压m4-1.4.13.t ...

  5. 内存检测工具valgrind的安装和简单使用

    1. 安装 .tar.bz2 cd valgrind- sudo ./configure sudo make sudo make install 2. 简单使用 #include <stdio. ...

  6. valgrind内存检测工具

    valgrind 那点事 ---------------------------------------内存检测工具 valgrind要使用此工具,可以使用--tool=memcheck 在Valgr ...

  7. Linux下查看进程IO工具iopp

    Linux下的IO检测工具最常用的是iostat,不过iostat只能查看到总的IO情况.如果要细看具体那一个程序点用的IO较高,可以使用iotop .不过iotop对内核版本和Python版本有要求 ...

  8. linux下内存泄露检测工具Valgrind介绍

    目前在linux开发一个分析实时路况的应用程序,在联合测试中发现程序存在内存泄露的情况. 这下着急了,马上就要上线了,还好发现了一款Valgrind工具,完美的解决了内存泄露的问题. 推荐大家可以使用 ...

  9. linux下内存检测工具的使用和对比

    linux背后隐藏着各种丰富的工具,学会这些工具,让这些工具更好地服务于我们的项目开发,不仅可以提高工作的效率,而且可以增强个人技术力. 参考:http://blog.chinaunix.net/ui ...

随机推荐

  1. oracle 函数 WMSYS.WM_CONCAT 与对应 mysql 函数GROUP_CONCAT的用法

    1.oracle函数 WMSYS.WM_CONCAT的使用 如图,将图1的结果变成图2的结果,使用函数 WMSYS.WM_CONCAT 即可. 查询语句需要配合使用group by select aa ...

  2. 使用matlab对图像进行傅里叶变换

    原图: (0) 代码: I=imread('1.jpg'); I=rgb2gray(I); I=im2double(I); F=fft2(I); F=fftshift(F); F=abs(F); T= ...

  3. 代码注释模板(把内容保存为xml文件,导入eclipse中即可)

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><templa ...

  4. ResourceWarning: unclosed <socket.socket fd=864, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('10.100.x.x', 37321), raddr=('10.1.x.x', 8500)>解决办法

    将代码封装,并使用unittest调用时,返回如下警告: C:\python3.6\lib\collections\__init__.py:431: ResourceWarning: unclosed ...

  5. Kali-linux应用更新和配置额外安全工具

    本节将介绍更新Kali的过程和配置一些额外的工具.这些工具在后面的章节中将是有用的.Kali软件包不断地更新和发布之间,用户很快发现一套新的工具比最初在DVD ROM上下载的软件包更有用.本节将通过更 ...

  6. c#返回值的理解

    我感觉没什么用...就是在别的地方用的时候可以直接以Add(a,b)这样的方式赋值就行,不用再用c这个中间变量去接收了,希望有一天有大佬能给我讲讲设置返回值有什么好处

  7. MVC学习十三:RouteDebugger插件应用

    1.下载第三方程序集RouteDebugger https://files.cnblogs.com/files/WarBlog/RouteDebugger.rar 2.把RouteDebugger程序 ...

  8. 若是将Map作为Key,存入Redis,该如何操作?

    1.先封装HashMap Map<String,Object> map=new HashMap<String,Object>(); map.put("name&quo ...

  9. 二维码生成(QRCode.js)

    什么是 QRCode.js? QRCode.js 是一个用于生成二维码的 JavaScript 库.主要是通过获取 DOM 的标签,再通过 HTML5 Canvas 绘制而成,不依赖任何库. 基本用法 ...

  10. React-Reflux 基础分享

    因工作需要使用 React + Reflux 开发,最近几天都在努力学习着,特别是 Reflux,在网上查找的许多资料和 github 上的文档年代都有点久远,JavaScript 按照目前的节奏,更 ...