ubuntu 下安装Valgrind 内存泄漏检查工具

2023-11-03

Valgrind 安装
1、 到www.valgrind.org下载最新版valgrind-3.7.0.tar.bz2
2、 解压安装包:tar –jxvf valgrind-3.7.0.tar.bz2
3、 解压后生成目录valgrind-3.7.0 
4、 cd valgrind-3.7.0
5、 ./configure
6、 Make;
7、 sudo  make install
具体请参看解压后的目录valgrind-3.7.0下的README文件。
Valgrind 使用

用法: valgrind [options] prog-and-args [options]: 常用选项,适用于所有Valgrind工具

  1. -tool=<name> 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。

  2. h –help 显示帮助信息。

  3. -version 显示valgrind内核的版本,每个工具都有各自的版本。

  4. q –quiet 安静地运行,只打印错误信息。

  5. v –verbose 更详细的信息, 增加错误数统计。

  6. -trace-children=no|yes 跟踪子线程? [no]

  7. -track-fds=no|yes 跟踪打开的文件描述?[no]

  8. -time-stamp=no|yes 增加时间戳到LOG信息? [no]

  9. -log-fd=<number> 输出LOG到描述符文件 [2=stderr]

  10. -log-file=<file> 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID

  11. -log-file-exactly=<file> 输出LOG信息到 file

  12. -log-file-qualifier=<VAR> 取得环境变量的值来做为输出信息的文件名。 [none]

  13. -log-socket=ipaddr:port 输出LOG到socket ,ipaddr:port

LOG信息输出

  1. -xml=yes 将信息以xml格式输出,只有memcheck可用

  2. -num-callers=<number> show <number> callers in stack traces [12]

  3. -error-limit=no|yes 如果太多错误,则停止显示新错误? [yes]

  4. -error-exitcode=<number> 如果发现错误则返回错误代码 [0=disable]

  5. -db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。[no]

  6. -db-command=<command> 启动调试器的命令行选项[gdb -nw %f %p]

适用于Memcheck工具的相关选项:

  1. -leak-check=no|summary|full 要求对leak给出详细信息? [summary]

  2. -leak-resolution=low|med|high how much bt merging in leak check [low]

  3. -show-reachable=no|yes show reachable blocks in leak check? [no]

    Valgrind 使用举例

    下面是一段有问题的C程序代码test.c

    #include <stdlib.h>
    void f(void)
    {
       int* x = malloc(10 * sizeof(int));
       x[10] = 0;  //问题1: 数组下标越界
    }                  //问题2: 内存没有释放
    int main(void)
    {
       f();
       return 0;
     }
    1、 编译程序test.c
    gcc -Wall test.c -g -o test
    2、 使用Valgrind检查程序BUG
    valgrind --tool=memcheck --leak-check=full ./test
    3、 分析输出的调试信息
    ==3908== Memcheck, a memory error detector.
    ==3908== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
    ==3908== Using LibVEX rev 1732, a library for dynamic binary translation.
    ==3908== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
    ==3908== Using valgrind-3.2.3, a dynamic binary instrumentation framework.
    ==3908== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
    ==3908== For more details, rerun with: -v
    ==3908== 
    --3908-- DWARF2 CFI reader: unhandled CFI instruction 0:50
    --3908-- DWARF2 CFI reader: unhandled CFI instruction 0:50
    /*数组越界错误*/
    ==3908== Invalid write of size 4      
    ==3908==    at 0x8048384: f (test.c:6)
    ==3908==    by 0x80483AC: main (test.c:11)
    ==3908==  Address 0x400C050 is 0 bytes after a block of size 40 alloc'd
    ==3908==    at 0x40046F2: malloc (vg_replace_malloc.c:149)
    ==3908==    by 0x8048377: f (test.c:5)
    ==3908==    by 0x80483AC: main (test.c:11)
    ==3908== 
    ==3908== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 14 from 1)
    ==3908== malloc/free: in use at exit: 40 bytes in 1 blocks. 
    ==3908== malloc/free: 1 allocs, 0 frees, 40 bytes allocated.
    ==3908== For counts of detected errors, rerun with: -v
    ==3908== searching for pointers to 1 not-freed blocks.
    ==3908== checked 59,124 bytes.
    ==3908== 
    ==3908== 
    /*有内存空间没有释放*/
    ==3908== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
    ==3908==    at 0x40046F2: malloc (vg_replace_malloc.c:149)
    ==3908==    by 0x8048377: f (test.c:5)
    ==3908==    by 0x80483AC: main (test.c:11)
    ==3908== 
    ==3908== LEAK SUMMARY:
    ==3908==    definitely lost: 40 bytes in 1 blocks.
    ==3908==      possibly lost: 0 bytes in 0 blocks.
    ==3908==    still reachable: 0 bytes in 0 blocks.
    ==3908==         suppressed: 0 bytes in 0 blocks.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu 下安装Valgrind 内存泄漏检查工具 的相关文章

随机推荐

  • brpc源码解析(十六)—— 作为client的连接建立和处理详解

    文章目录 一 连接方式的定义 二 连接方式的选择 三 获取用于连接的socket 3 1 获取指代具体下游服务的tmp socket 3 2 根据tmp socket获取用于发送数据的socket 3 3 连接以准备发送 四 数据发送完毕后
  • python setup.py install 常用命令参数详解

    setup py 命令 参数 setup py 文件有很多内置命令可供使用 查看所有支持的命令 python setup py help commands 注意要在有 setup py文件 的目录下用 cmd 运行此命令 常用命令 buil
  • 8、自定义映射resultMap

    8 自定义映射resultMap 搭建MyBatis框架 新建modules gt resultMap t emp表 SET NAMES utf8mb4 SET FOREIGN KEY CHECKS 0 Table structure fo
  • 5G小站中的数字预失真(DPD)技术

    5G小站中的数字预失真 DPD 技术 标题 一 基站中为什么要用数字预失真 DPD 技术 为了获得更大的输出信号功率 功率放大器一般会工作在接近饱和点的工作范围 这样功放的非线性失真会使其产生新的频率分量 如对于二阶失真会产生二次谐波和双音
  • Vijava 学习笔记之(Template 克隆虚拟机并修改Template 指定虚拟磁盘大小)

    源代码 package com vmware template import com vmware util Session import com vmware vim25 import com vmware vim25 mo import
  • 通过百度地图API和高德地图API进行反坐标逆向地理位置

    本文分别通过百度地图API和高德地图API 通过WGS84的坐标返回详细的地理位置 一 通过百度地图API进行反坐标逆向地理位置 import java io BufferedReader import java io IOExceptio
  • 英语CET6救命作文通用模板

    这是根据刘晓燕的6级救命班所写的笔记 建议结合 英语四六级万能作文模板 进行独一无二的英语作文模板创造 一 常见土单词排行榜 think 可替换为 have been convinced that be of the opinion tha
  • hive三种元数据存储方式

    hive本身不存储数据 借助hdfs存储数据 hive和关系型数据库一样是有表结构的 这些信息hive也存储在第三方软件中 如derby mysql 根据元数据的存储方式 hive的部署可以分为三种 一 local模式 采用内置的derby
  • Eladmin框架前端后台学习笔记

    文章目录 Eladmin框架前端后台学习 项目简介 用户账号密码 运行 技术栈 项目结构 常见问题 1 如何开发一个新模块 2 如何做权限管理 3 头部增删改查等按钮 不显示某个按钮 或从左侧或右侧新增按钮 4 页面初始化时不请求查询数据接
  • Golang 单元测试框架的使用

    一 使用gomonkey stub 打桩 在测试包中创建一个模拟方法 用于替换生成代码中的方法 1 stub函数 gomonkey ApplyFunc target double 其中target是被mock的目标函数 double是用户重
  • 文件上传骚姿势合集

    目录 黑名单规则绕过 绕过前端 js 检测方法 判断是否为前端检测还是后端服务器检测方法 绕过 contnet type 检测上传 常见MIME类型 绕过黑名单上传 同解析后缀名 htaccess 重写解析绕过上传 大小写绕过上传 空格绕过
  • http、https流程以及版本区别

    从输入url后按下回车开始 因为可能记录了地址 看是否要redirect 因为可能记录了永久跳转成新的地址 再看缓存 没有缓存再去服务器 首先查找DNS 创建TCP连接 发送http请求数据包 返回响应数据 结束接受返回 http 0 9
  • Spark 流数据处理简介

    一 Spark 基础知识 1 1 Spark 简介 Spark是专为大规模数据处理而设计的快速通用的计算引擎 可用它来完成各种各样的运算 包括 SQL 查询 文本处理 机器学习等 1 2 核心概念介绍 Spark常用术语介绍 Applica
  • HTTP报头

    HTTP协议是什么 HTTP协议 HyperText Transfer Protocol 超文本传输协议 是用于从WWW服务器传输超文本到本地浏览器的传送协议 它可以使浏览器更加高效 使网络传输减少 它不仅保证计算机正确快速地传输超文本文档
  • 一篇文章入门Hibernate框架

    什么是Hibernate 一个框架 一个Java领域的持久化框架 一个ORM框架 什么叫持久化操作 和数据库相关的各种操作 对象的增删改查 什么是ORM 对象 关系映射 ORM思想 将关系数据块中表中的记录映射成为对象 以对象的形式展现 程
  • 525中电六所智能

    还是要记录一下 总结反思学习一下的 0 面试官自我介绍 1 自我介绍 2 介绍项目 有了解过视频流嘛 视频流是指视频数据的传输 例如 它能够被作为一个稳定的和连续的流通过网络处理 因为流动 客户机浏览器或插件能够在整个文件被传输完成前显示多
  • 数据库系统概论 中文高清PDF版下载

    数据库系统概论 中文高清PDF版下载 转载于 https www cnblogs com gavinhughhu archive 2010 01 05 1639949 html
  • 等保测评2.0_三级——【安全计算环境】MySQL数据库测评项汇总

    等保测评2 0 三级 安全计算环境 MySQL数据库测评项汇总 安全计算环境 MySQL数据库测评项汇总 五个测评单元 控制项 1 身份鉴别 a 应对登录的用户进行身份标识和鉴别 身份标识具有唯一性 身份鉴别信息具有复杂度要求并定期更换 b
  • Ngnix:防止恶意域名解析

    通过nginx部署的网站 默认没有设置主机头 可以通过IP或其他未在配置文件中指定的域名来访问 这有可能会导致恶意域名指向到我们服务器IP地址 而根据工信部备案系统判定原则 如有非法域名恶意指向用户主机并且网站访问状态为未有效关闭 则此类非
  • ubuntu 下安装Valgrind 内存泄漏检查工具

    Valgrind 安装 1 到www valgrind org下载最新版valgrind 3 7 0 tar bz2 2 解压安装包 tar jxvf valgrind 3 7 0 tar bz2 3 解压后生成目录valgrind 3 7