首页 > 其他分享 >valgrind的memcheck功能使用手册

valgrind的memcheck功能使用手册

时间:2024-02-03 17:33:20浏览次数:26  
标签:bin 21045 21046 -- memcheck bytes valgrind 使用手册

valgrind是一个构建动态分析程序的工具集框架,它有一套功能强大的工具集合,包括debug、profiling等,其中最重要和常用的是内存泄漏检测工具memcheck

下载:

wget https://sourceware.org/pub/valgrind/valgrind-3.22.0.tar.bz2 --no-check-certificate

解压后编译安装:

tar xf valgrind-3.22.0.tar.bz2 && cd valgrind-3.22.0
./configure --prefix=`pwd`/bin_install
make -j 20 && make install

注意操作系统需要redhat7以上系统,否则编译会报错。并且运行的系统也要再redhat7以上系统上,否则会出现一些莫名其妙的错误,例如new函数返回NULL,对应的errno是115(Operation now in progress)或者110(Connection timed out)

运行valgrind的memcheck功能方法如下:

  1. 配置PATH环境变量:
export PATH=/path/to/valgrind-3.22.0/bin_install/bin:$PATH
  1. 指定参数运行:
valgrind --tool=memcheck --leak-check=full --trace-children=yes --log-file=valgrind.log ./a.out
# --tool指定哪一个valgrind工具去使用,此处用的是memcheck
# --leak-check指定输出具体的内存泄露位置
# --trace-children指定是否追踪子进程
# --log-file指定记录日志文件的名称
# 最后是运行命令的路径以及它的参数
# 相关使用帮助:
# https://valgrind.org/docs/manual/manual-core.html
# https://valgrind.org/docs/manual/mc-manual.html#mc-manual.overview
  1. 日志结果的解读:
# 开始部分会有如下输出:
==21045== TO CONTROL THIS PROCESS USING vgdb (which you probably
==21045== don't want to do, unless you know exactly what you're doing,
==21045== or are doing some strange experiment):
==21045==   /path/to/valgrind-3.22.0/bin_install/libexec/valgrind/../../bin/vgdb --pid=21045 ...command...
==21045==
==21045== TO DEBUG THIS PROCESS USING GDB: start GDB like this
==21045==   /path/to/gdb bin/calEng
==21045== and then give GDB the following command
==21045==   target remote | /path/to/valgrind-3.22.0/bin_install/libexec/valgrind/../../bin/vgdb --pid=21045
==21045== --pid is optional if only one valgrind process is running
# 这部分是在说明如何通过gdb来调试进程,需要通过一个vgdb的中间件工具来开始调试过程

==21045== HEAP SUMMARY:
==21045==     in use at exit: 35,163,487 bytes in 13 blocks
==21045==   total heap usage: 2,017 allocs, 2,004 frees, 180,650,623 bytes allocated
==21045==
==21045== Searching for pointers to 13 not-freed blocks
==21045== Checked 54,065,968 bytes

==21045== LEAK SUMMARY:
==21045==    definitely lost: 72 bytes in 3 blocks
==21045==    indirectly lost: 0 bytes in 0 blocks
==21045==      possibly lost: 32,637,056 bytes in 2 blocks
==21045==    still reachable: 2,526,359 bytes in 8 blocks
==21045==         suppressed: 0 bytes in 0 blocks
==21045== Reachable blocks (those to which a pointer was found) are not shown.
==21045== To see them, rerun with: --leak-check=full --show-leak-kinds=all

==21045== ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 0 from 0)
--21046-- REDIR: 0x4ab28c0 (libc.so.6:bcmp) redirected to 0x40241c3 (_vgnU_ifunc_wrapper)
--21046-- REDIR: 0x4b8d220 (libc.so.6:__memcmp_sse4_1) redirected to 0x4039890 (__memcmp_sse4_1)
--21046-- REDIR: 0x4b75130 (libc.so.6:__memmove_ssse3) redirected to 0x4037760 (memcpy@GLIBC_2.2.5)
==21046== Warning: set address range perms: large range [0x153cd5040, 0x17ba55500) (undefined)
--21046-- REDIR: 0x597a050 (libstdc++.so.6:operator delete[](void*)) redirected to 0x403324b (operator delete[](void*))
--21046-- REDIR: 0x597a020 (libstdc++.so.6:operator delete(void*)) redirected to 0x4031237 (operator delete(void*))

# 条件判断中使用了未初始化的变量
==21046== Thread 17:
==21046== Conditional jump or move depends on uninitialised value(s)
==21046==    at 0x91FA4C: heartbeat(long, int, int, long) (service.cpp:2349)

# 系统调用参数有未初始化的变量
==21046== Thread 16:
==21046== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
==21046==    at 0x4B22ECB: send (in /usr/lib64/libc-2.17.so)

标签:bin,21045,21046,--,memcheck,bytes,valgrind,使用手册
From: https://www.cnblogs.com/lifewithlight/p/18004988

相关文章

  • 使用valgrind分析Linux程序内存泄漏
     1      安装...12      参数说明...13      使用问题...2 1        安装直接使用命令行安装sudoapt-getinstallvalgrind源代码下载安装下载最新版本:http://valgrind.org/downloads/current.html#current安装命令:tar-jxvfvalg......
  • Python自带的GUI库:Tkinter库使用手册(未完善)
    文章目录一、Tkinter是什么二、主窗口1、窗口的常用方法2、实例参考资料一、Tkinter是什么Tkinter(即tkinterface,简称“Tk”)本质上是对Tcl/Tk软件包的Python接口封装,它是Python官方推荐的GUI工具包,属于Python自带的标准库模块,当您安装好Python后,就可以直接使用它,而......
  • DM7_SQL语言使用手册_第 1 章 结构化查询语言 DM_SQL 简介
    第1章结构化查询语言DM_SQL简介结构化查询语言SQL(StructuredQueryLanguage)是在1974年提出的一种关系数据库语言。由于SQL语言接近英语的语句结构,方便简洁、使用灵活、功能强大,倍受用户及计算机工业界的欢迎,被众多计算机公司和数据库厂商所采用,经各公司的不断修改......
  • Jmeter 压测工具使用手册(完整版)
    一、jemter简介jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免安装的,拿到安装包之后直接解压就可以使用,同时它在......
  • Docker使用手册--给你通用常用命令
    卸载JDKrpm-qa|grep-ijavarpm-qa|grep-ijava|xargs-n1rpm-e--nodeps安装JDKtar-zxvfjdk-8u351-linux-x64.tar.gzvim/etc/profileexportJAVA_HOME=/home/jdk/jdk-11.0.19exportJRE_HOME=${JAVA_HOME}/jreexportCLASSPATH=.:${JAVA_HOME}/lib:$......
  • 拓扑排序软件设计——ToplogicalSort_app(含有源码、需求分析、可行性分析、概要设计、
    @目录前言1.需求分析2.可行性分析2.1简介2.2技术可行性分析2.2.1技术实现方案2.2.2开发人员技能要求2.2.3可行性2.3操作可行性分析2.4结论3.项目报告3.1修订历史记录3.2软硬件环境3.3需求分析3.4详细设计3.4.1类设计3.4.2核心流程描述3.4.3核心算法设计3.5运行......
  • Rancher v1.x 使用手册之三 安装Rancher并启用SSL
    安装Rancher并启用SSL为了在RancherServer启用 https 访问,您需要在RancherServer前使用一个代理服务器代理https请求,并能设置http的头参数。我们会在以下的内容中提供一个使用NGINX、HAProxy或者Apache作为代理的例子。当然了,其他工具也是可以的。需求除了一般的RancherServer......
  • Rancher v1.x 使用手册之四—离线安装
    离线安装不可对外访问的网络环境(内网)也是可以启动Rancher服务的。在这种拓扑下,可以通过内网提供的IP或者域名来访问Rancher的操作界面(UI界面)。另外,也可以用HTTP代理或者私有镜像库来配置Rancher。需要注意的是,在内网中启动一个Rancher服务会导致一些特性无效,比如:使用操作......
  • Rancher v1.x 使用手册之二安装Rancher
    安装RancherRancher是使用一系列的Docker容器进行部署的。运行Rancher跟启动两个容器一样简单。一个容器作为管理服务器部署,另外一个作为集群节点的Agent部署注意:您可以运行RancherServer的容器的命令 dockerrunrancher/server—help 来获得所有选项以及帮助信息。安装需求......
  • VSS使用手册(VSS 6.0d/Visual SourceSafe)
    1VSS概述    版本控制是工作组软件开发中的重要方面,它能防止意外的文件丢失、允许反追踪到早期版本、并能对版本进行分支、合并和管理。在软件开发和您需要比较两种版本的文件或找回早期版本的文件时,源代码的控制是非常有用的。VisualSourceSafe是一种源代码控制系统,它......