linux代码检测工具valgrind之内存检测memcheck

2023-05-16

1、安装命令:

$ sudo apt-get install valgrind

安装成功如下:

 检测版本命令:$ valgrind --version 

2、valgrind检测工具tool介绍

(1)Memcheck是一个内存错误检测器。

(2)Cachegrind是缓存和分支预测分析器。

(3) Callgrind检查程序函数调用过程出现问题的工具。

(4) Helgrind是检测多线程程序出现错误的工具。

 常用的检测工具有上面几个,本文安装的工具如下:

3、内存检测工具memcheck用法

使用命令:

//方法1: 直接输出到控制台
valgrind --tool=memcheck --leak-check=full ./test //test为程序名

//方法2: 重定向到文件中log.txt中
valgrind --tool=memcheck --log-file=./log.txt  --leak-check=full  ./test 

demo

#include <iostream>
using namespace std;

int main()
{
    cout << "Hello World!" << endl;

    {
    char* pSubject = new char[1*1024];
    }
    return 0;
}

 使用检测工具memcheck检测结果如下:

结果分析:

 上面画线地方可以看到内存泄漏1024字节,代码在main.cpp的第10行。

官网对上面泄漏总结分类解释如下:

  • “definitely lost” means your program is leaking memory – fix those leaks!
  • “indirectly lost” means your program is leaking memory in a pointer-based structure. (E.g. if the root node of a binary tree is “definitely lost”, all the children will be “indirectly lost”.) If you fix the “definitely lost” leaks, the “indirectly lost” leaks should go away.
  • “possibly lost” means your program is leaking memory, unless you’re doing unusual things with pointers that could cause them to point into the middle of an allocated block; see the user manual for some possible causes. Use --show-possibly-lost=no if you don’t want to see these reports.
  • “still reachable” means your program is probably ok – it didn’t free some memory it could have. This is quite common and often reasonable. Don’t use --show-reachable=yes if you don’t want to see these reports.
  • “suppressed” means that a leak error has been suppressed. There are some suppressions in the default suppression files. You can ignore suppressed errors.

可以看出绝对丢失的“definitely lost”必须需要修复。间接丢失“indirectly lost“,如果修复了绝对丢失,则间接丢失应该消失。

附加知识:

1、官网知识:Valgrind Home

2、linux valgrind 安装和使用_Zhongyl_的博客-CSDN博客 

3、valgrind基本功能介绍、基础使用方法说明_valgrind 使用_HNU Latecomer的博客-CSDN博客

4、valgrind和vgdb使用:valgrind可以输出部分报告而无需退出配置文件应用程序吗?_RyanLeiWang的博客-CSDN博客 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux代码检测工具valgrind之内存检测memcheck 的相关文章

  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • Elasticsearch 无法写入日志文件

    我想激活 elasticsearch 的日志 当我运行 elasticsearch 二进制文件时 我意识到我在日志记录方面遇到问题 无法加载配置 这是输出 sudo usr share elasticsearch bin elasticse
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 如何检测并找出程序是否陷入死锁?

    这是一道面试题 如何检测并确定程序是否陷入死锁 是否有一些工具可用于在 Linux Unix 系统上执行此操作 我的想法 如果程序没有任何进展并且其状态为运行 则为死锁 但是 其他原因也可能导致此问题 开源工具有valgrind halgr
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • 如何禁用 GNOME 桌面屏幕锁定? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何阻止 GNOME 桌面在几分钟空闲时间后锁定屏幕 我已经尝试过官方手册了在红帽 https access redhat com doc
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im

随机推荐

  • Linux下的tree命令 --Linux下目录树查看

    Linux下的tree命令 Linux下目录树查看 有时我们需要生成目录树结构 可以使用的有ls R 但是实际效果并不好 这时需要用到tree命令 但是大部分Linux系统是默认不安装该命令的 需要自己安装一下 tree的常见用法 tree
  • gcc学习(一)[第二版]

    gcc简介 1 gcc是GNU Compiler Collection的缩写 最初是作为C语言的编译器 xff08 GNU C Compiler xff09 作者为Richard Stallman xff0c 是GNU项目的奠基者 现在已经
  • Socket编程实践(9) --套接字IO超时设置方法

    引 超时设置3种方案 1 alarm超时设置方法 代码实现 这种方式较少用 void sigHandlerForSigAlrm int signo return signal SIGALRM sigHandlerForSigAlrm ala
  • 岁月划过生命线(从0到阿里)

    从来没有想到自己的求职之路会这么顺利 第一次投阿里就拿到了offer 以前一直都是做好被刷的准备的 3月31号晚上收到了来自阿里的正式offer 签下录取意向书 粗略算了一下 从2012年9月份正式入学进入计算机系到2015年3月签下阿里o
  • MyBatis 实践 -Mapper与DAO

    MyBatis 实践 标签 xff1a Java与存储 MyBatis简介 MyBatis前身是iBatis 是一个基于Java的数据持久层 对象关系映射 ORM 框架 MyBatis是对JDBC的封装 使开发人员只需关注SQL本身 而不需
  • Maven 核心原理

    Maven 核心原理 标签 xff1a Java基础 Maven 是每一位Java工程师每天都会接触的工具 但据我所知其实很多人对Maven理解的并不深 只把它当做一个依赖管理工具 下载依赖 打包 Maven很多核心的功能反而没用上 最近重
  • JVM初探 -JVM内存模型

    JVM初探 JVM内存模型 标签 xff1a JVM JVM是每个Java开发每天都会接触到的东西 其相关知识也应该是每个人都要深入了解的 但接触了很多人发现 或了解片面或知识体系陈旧 因此最近抽时间研读了几本评价较高的JVM入门书籍 算是
  • 岁月划过生命线(2016 年终总结 -季度之星)

    岁月划过生命线 2016 年终总结 季度之星 标签 xff1a coder 年假结束 明天就要回到杭州 回到我fighting的战场 回首过去的2016 放纵了许多 但也收获了很多 n个项目 n个框架 第一个季度之星 头像第一次登上CSDN
  • 备忘录模式

    备忘录模式 标签 xff1a Java与设计模式 备忘录模式 在不破坏封装性的前提下 捕获一个对象的内部状态 or 拷贝 并在该对象之外保存这个状态 这样以后就可 将该对象恢复到原先保存的状态 图片来源 设计模式 可复用面向对象软件的基础
  • 迭代器模式

    迭代器模式 标签 xff1a Java与设计模式 迭代器模式 提供一种方法顺序访问聚合对象 如List Set 内的每个元素 而又不暴露聚合对象的内部实现 图片来源 设计模式 可复用面向对象软件的基础 模式实现 Iterator amp A
  • Ubuntu 更换 apt 镜像源

    Ubuntu 更换 apt 镜像源 apt 是 Ubuntu 系的包管理工具 xff0c 一般默认使用 ubuntu 的官方源 http archive ubuntu com 在国内下载的速度慢到让人想砸电脑 xff0c 可以更换为国内的镜
  • 简洁的Java8

    简洁的Java8 Stream 标签 xff1a Java基础 再次回到阿里 感觉变化好大 一是服务资源Docker化 最牛逼的阿里DB团队竟然把DB放到了容器中 还放到了线上环境 二是全集团Java8 记得离开时还是1 6 1 5 甚至还
  • 学习信号量 sem_init、sem_destroy、sem_post、sem_wait、sem_trywait、sem_getvalue

    学习信号量 sem init sem destroy sem post sem wait sem trywait sem getvalue 概要 xff1a 1 信号量使用场合 2 POSIX标准定义的信号量 2 1 sem init se
  • Intel Realsense windows安装与入门

    realsense400系列介绍 xff1a https www intelrealsense com stereo depth utm source 61 intelcom website amp utm medium 61 button
  • 到底什么是数据架构,如何管理,谁来负责?

    理解概念是理解数据管理的第一步 xff0c 很多概念我们知道 xff0c 但内涵却不清楚 xff0c 或者你以为清楚 xff0c 这类澄清概念的文章可以很好的帮到你 xff01 源于数据治理周周谈 xff0c 作者徐康 随着数据治理工作的深
  • linux下安装yum步骤

    一 安装yum前下介绍以下知识 1 yum介绍 Yum xff08 全称为 Yellow dog Updater Modified xff09 是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器 基于RPM包管
  • C++工程的CMakeLists.txt文件编写

    最简单的demo工程如下 xff1a include lt iostream gt include lt string gt int main int argc char argv std cout lt lt 34 hello world
  • windows/linux下Qt可执行程序打包,linux桌面双击运行程序sh脚本

    1 windows下Qt打包 windows下Qt的可执行文件打包简单的来说就是利用Qt自带依赖的打包工具windeployqt进行打包 xff0c 该工具存在Qt安装目录下 xff0c 执行命令为 xff1a windeployqt na
  • opengl、opengl es、webgl介绍与opengl开发入门

    1 OpenGL OpenGL xff08 英语 xff1a Open Graphics Library xff0c 译名 xff1a 开放图形库或者 开放式图形库 xff09 常用于CAD 虚拟现实 科学可视化程序和电子游戏开发 Open
  • linux代码检测工具valgrind之内存检测memcheck

    1 安装命令 xff1a sudo apt get install valgrind 安装成功如下 xff1a 检测版本命令 xff1a valgrind version 2 valgrind检测工具tool介绍 xff08 1 xff09