zoukankan      html  css  js  c++  java
  • 【调试】Linux下超强内存检测工具Valgrind

    【调试】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开发。
    热爱生活,喜欢游泳,略懂烹饪。

  • 相关阅读:
    【KM】BZOJ1937 [Shoi2004]Mst 最小生成树
    【动态规划+Floyd】OpenJudge3368
    【四边形不等式】HDU3506-Monkey Party
    【tarjan】BZOJ2140-稳定婚姻
    【并查集】BZOJ4668-冷战
    [ZJOI2010]贪吃的老鼠(网络流+建图)
    [NOI2010]航空管制(拓扑排序+贪心)
    [CERC2017]Intrinsic Interval(神仙+线段树)
    [CTSC2012]熟悉的文章(后缀自动机+动态规划)
    [CERC2014]Virus synthesis
  • 原文地址:https://www.cnblogs.com/zhehan54/p/6362306.html
Copyright © 2011-2022 走看看