• 初试valgrind内存调试工具


    虽然GDB调试工具功能强大,但对于平时做题调试的使用并不方便,这里尝试学习使用比较简单的valgrind工具

    Valgrind是一个提供程序调试及性能分析的工具集。其包含的工具主要有Memcheck,Cachegrind,Callgrind,Massif等。其中,最为常用的是Memcheck,其主要用来检查程序heap上的内存使用情况

    首先是安装

    在终端输入sudo apt-get install valgrind进行安装

    安装完成后即可使用

    使用方法是,对编译后的程序如a.out

    使用命令valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./a.out 这里默认a.out在系统根目录下

    直接使用valgrind ./a.out好像也可以

    运行程序过程中若有内存错误或者泄漏都会显示出来在哪一行

    以下摘抄一些说明

    1. ==2014== 表示进程号信息,基本没用。 2. 接下来是Memcheck的版权声明信息。
    3. 详细的报错信息,如at 0x4009C6: main (test.cpp:7) Address 0x4a2005c is 4
    bytes after a block of size 40 alloc'd
    说明test.cpp的第7行发生内存访问越界,越界的位移为4。 4. ERROR SUMMARY下面为错误汇总信息。
    5. 接着是内存泄漏信息。说明有40byte的内存泄漏。 6. LEAK SUMMARY为内存泄漏信息。 在LEAK SUMMARY中:
     definitely lost:表明没有任何指针指向该区域,已经造成了内存泄漏。  possibly lost:存在指针指向内存中的某个位置,valgrind认为你有可能
    是在做一些其他的高级应用(将指针放在申请的内存块中间)
     still reachable:仍有指针引用该内存块,只是没有释放而已,可以通过设
    置—show-reachable=yes来报错。

    Valgrind常用命令参数
    1. --tool=<name> [default=memcheck]
    --tool参数指明所要使用valgrind的哪一个工具,默认的为memcheck。因为
    大多数情况下我们只会用到memcheck工具,因此该参数可以不写。
    2. --leak-check=<no|summary|yes|full>[default:summary] 在退出时检查是否有泄漏。Summary只是告诉我们有多少次泄漏,yes或full会告诉我们每次泄漏的详细信息。 
    3. --show-reachable=<yes|no>[default:no]
    通过设定该参数为yes,则显示still reachable类型的内存泄漏信息。

  • 相关阅读:
    AjaxPro对象参数传递
    SQLServer “无法对数据库'XX' 执行删除,因为它正用于复制”的解决方法
    sql server 查询某个表被哪些存储过程调用
    存储过程简单实例
    清理sqlserver 2012 日志文件
    从客户端(XXX)中检测到有潜在危险的Request.Form 值
    sqlserver无法在数据库上放置锁
    C#趋势图(highcharts插件)
    TFS 报错解决方案:tf400324
    checkbox勾选事件,JQ设置css,下拉框JQ选中
  • 原文地址:https://www.cnblogs.com/linjj/p/3757300.html
Copyright © 2020-2023  润新知