valgrind安装及使用
valgrind介绍
Valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,用于构建动态分析工具的装备性框架。它包括一个工具集,每个工具执行某种类型的调试、分析或类似的任务,以帮助完善你的程序。Valgrind的架构是模块化的,所以可以容易的创建新的工具而又不会扰乱现有的结构。
Valgrind包括如下一些工具
Memcheck。检查程序中的内存问题,如泄漏、越界、非法指针等
Callgrind。它主要用来检查程序中函数调用过程中出现的问题。
Cachegrind。分析CPU的cache命中率、丢失率,用于进行代码优化。
Helgrind。它主要用来检查多线程程序中出现的竞争问题。
Massif。它主要用来检查程序中堆栈使用中出现的问题。
Extension。可以利用core提供的功能,自己编写特定的内存调试工具
valgrind安装
1.valgrind下载:

http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2

下载好之后在虚拟机文件里面创建一个文件夹,我这里命名为valgrind,将上面下载好的安装包复制在里面。


快捷键Ctrl+Alt+t
输入cd valgrind
enter
2.valgrind安装:

tar -jxvf valgrind-3.12.0.tar.bz2
cd valgrind-3.12.0
./configure
make
sudo make install

下面进行详细讲解
Valgrind 工具详解
memcheck
最常用的工具,用来检测程序中出现的内存问题,所有对内存的读写都会被检测到,一切对malloc、free、new、delete的调用都会被捕获。
用法:

valgrind—tool=mencheck ./程序名

注意 :mencheck后面有一个空格
可以检测的问题
1、使用未初始化的内存。
2、读/写释放后的内存块;
3、内存读写越界(数组访问越界/访问已经释放的内存),读/写超出malloc分配的内存块;
4、读/写不适当的栈中内存块;
5、内存泄漏,指向一块内存的指针永远丢失;
6、不正确的malloc/free或new/delete匹配(重复释放/使用不匹配的分配和释放函数);
7、内存覆盖,memcpy()相关函数中的dst和src指针重叠

使用valgrind来对内存泄漏进行检测,
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all --undef-value-errors=no --log-file=log ./可执行文件名
在log文件最后会有个summary,其中对内存泄露进行了分类,总共有五类:
(1)“definitely lost” 意味着你的程序一定存在内存泄露;
(2)”indirectly lost”意味着你的程序一定存在内存泄露,并且泄露情况和指针结构相关
(3) “possibly lost” 意味着你的程序一定存在内存泄露,除非你是故意进行着不符合常规的操作,例如将指针指向某个已分配内存块的中间位置。
(4) “still reachable” 意味着你的程序可能是没问题的,但确实没有释放掉一些本可以释放的内存。这种情况是很常见的,并且通常基于合理的理由。
(5)”suppressed” 意味着有些泄露信息被压制了。在默认的 suppression 文件中可以看到一些 suppression 相关设置。其中,如果二叉树的根节点被判定为”definitely lost”,则其所有子节点将被判定为”indirectly lost”,而如果你正确修复了类型为 “definitely lost” 的根节点泄露,那么类型为 “indirectly lost” 的子节点泄露也会随着消失。对于如上图所示的情况,posslbly lost其实并没有造成内存上的影响,如果想要过滤掉该类报告信息,可以加入--show-possibly-lost=no ,而对于”still reachable” ,同样可以通过--show-reachable=yes来控制是否输出相应的信息。如果某些需要的库没有找到,用指令export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

举个例子



Cachegrind
用法:valgrind –tool=cachegrind ./程序名
下面内容转载于https://blog.csdn.net/qq_33336155/article/details/52608383
大家可以去看看
Valgrind 使用
用法: valgrind [options]prog-and-args [options]:常用选项,适用于所有Valgrind工具

  1. -tool=最常用的选项。运行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=输出LOG到描述符文件 [2=stderr]
  10. -log-file=将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
  11. -log-file-exactly=输出LOG信息到 file
  12. -log-file-qualifier=取得环境变量的值来做为输出信息的文件名。 [none]
  13. -log-socket=ipaddr:port输出LOG到socket ,ipaddr:port
    LOG信息输出
  14. -xml=yes将信息以xml格式输出,只有memcheck可用
  15. -num-callers= show callersin stack traces [12]
  16. -error-limit=no|yes如果太多错误,则停止显示新错误? [yes]
  17. -error-exitcode=如果发现错误则返回错误代码 [0=disable]
  18. -db-attach=no|yes当出现错误,valgrind会自动启动调试器gdb。[no]
  19. -db-command=启动调试器的命令行选项[gdb -nw %f %p]
    适用于Memcheck工具的相关选项:
  20. -leak-check=no|summary|full要求对leak给出详细信息? [summary]
  21. -leak-resolution=low|med|high how much bt merging in leakcheck [low]
    -show-reachable=no|yesshow reachable blocks in leak check? [no]
    编写示例代码main.c,前面数字为行号。
    1 int main()
    2 {
    3 int * pArray =malloc(sizeof(int) * 5);
    4
    5 pArray[5] = 1;
    6
    7
    8 int * pInt ;
    9
    10 int x = *pInt;
    11
    12 * pInt = 2;
    13
    14 return 0;
    15 }
    编译 gcc -g -otest main.c
    呈现编译时一定要增加-g参数,以添加调试信息,这样memcheck的错误信息可以精确到行。
    检测:valgrind–leak-check=yes ./test (//后红色字体是后加的解释语句)

30407 Memcheck,a memory error detector //30407进程号,不必关心

30407 Copyright© 2002-2015, and GNU GPL’d, by Julian Seward et al.

30407 Using Valgrind-3.11.0and LibVEX; rerun with -h for copyright info

30407 Command:./test

30407

30407 Invalidwrite of size 4 //四字节的非法写

30407 at 0x804845C: main (main.c:5) //代码位置,第5行,即pArray[5] = 1;

30407 Address 0x41ce03c is 0 bytes after a block ofsize 20 alloc’d

          //内存位置:20个字节后第0个字节,即pArray[5]数组末尾处。

30407 at 0x402BBC9: malloc(vg_replace_malloc.c:299)

30407 by 0x8048450: main (main.c:3)

30407

30407 Use ofuninitialised value of size 4 //四字节的未初始化内存被使用

30407 at 0x8048466: main (main.c:10) //代码位置,第10行,即int x = *pInt;

30407

30407 Use ofuninitialised value of size 4 //四字节的未初始化内存被使用

30407 at 0x8048470: main (main.c:12) //代码位置,第12行,即* pInt = 2;

30407

30407

30407 Processterminating with default action of signal 11 (SIGSEGV): dumping core //非法指针导致呈现崩溃

30407 Bad permissions for mapped region at address0x804848B

30407 at 0x8048470: main (main.c:12) //具体位置,12行。

30407

30407 HEAPSUMMARY:

30407 in use at exit: 20 bytes in 1 blocks

  // 20个bytes,未free,即数组pArray。

30407 total heap usage: 1 allocs, 0 frees, 20bytes allocated

30407

30407 LEAKSUMMARY:

30407 definitely lost: 0 bytes in 0 blocks

30407 indirectly lost: 0 bytes in 0 blocks

30407 possibly lost: 0 bytes in 0 blocks

30407 still reachable: 20 bytes in 1 blocks

30407 suppressed: 0 bytes in 0 blocks

30407 Reachableblocks (those to which a pointer was found) are not shown.

30407 To seethem, rerun with: --leak-check=full --show-leak-kinds=all

30407

30407 Forcounts of detected and suppressed errors, rerun with: -v

30407 Use–track-origins=yes to see where uninitialised values come from

30407 ERRORSUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)

Segmentation fault

valgrind安装及使用相关推荐

  1. linux valgrind 安装和使用

    linux valgrind 安装和使用 安装过程没这么复杂. 直接命令行: sudo apt-get install valgrind Valgrind 是个开源的工具,功能很多.例如检查内存泄漏工 ...

  2. Valgrind 安装与使用

    调不尽的内存泄漏,用不完的Valgrind Valgrind 安装 1. 到www.valgrind.org下载最新版valgrind-3.2.3.tar.bz2 2. 解压安装包:tar –jxvf ...

  3. [valgrind] 安装与使用

    [valgrind] 安装与使用 Date : 2022-07-28 Author : AnimateX 01 下载 valgrind 稳定版源码 下载地址:Current Releases,当前能选 ...

  4. Unix下C程序内存泄漏检测工具Valgrind安装与使用

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Goo ...

  5. valgrind安装使用

    下载与安装 #wget http://www.valgrind.org/downloads/valgrind-3.8.1.tar.bz2 #tar xvf valgrind-3.8.1.tar.bz2 ...

  6. linux环境valgrind 安装

    wget http://valgrind.org/downloads/valgrind-3.14.0.tar.bz2 tar xvf valgrind-3.14.0.tar.bz2 cd valgri ...

  7. Unix下C程序内存泄露检测工具:valgrind的安装使用

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Goo ...

  8. Valgrind memcheck介绍以及在海思himix410平台的安装使用

    Valgrind memcheck介绍以及在海思himix410平台的安装使用 概要 Valgrind 介绍 Memcheck 工具简介 内存泄漏类型细分 内存泄漏举例: definitely los ...

  9. 【安装配置】安装适用于 Linux 的 Windows 子系统 WSL ,完成 Clion 中对内存泄漏检测工具 Valgrind 的配置,亲测可用

    关键词:[Linux] [WSL] [Clion] [Valfrind] 一.前言 今天在回答一个粉丝的评论(关于C++ delete 和 delete[ ])时,引出上面的系列问题,具体流程如下: ...

最新文章

  1. what is MEAN
  2. 自定义控件-绕着圆形轨迹旋转的小球
  3. hadoop程序开发 --- python
  4. 【MM模块】Procurement for Stock Material 库存型物料采购相关
  5. JavaScript实现多项式哈希算法(附完整源码)
  6. 什么是ActiveMQ?
  7. Mysqldump命令参数介绍
  8. git安装-centos版
  9. mysql-表记录之增删改操作
  10. php高德地图计算距离接口,路径长度-距离/面积计算-示例中心-JS API 示例 | 高德地图API...
  11. 简单的抽奖function
  12. VS2010与.NET4系列 6.ASP.NET,HTML,JavaScript片断支持
  13. C# FAQ: const和static readonly有什么区别?
  14. 刷机必备:BlackBerry ROM,桌面管理器下载
  15. php计算ip掩码,php进行ip地址掩码运算处理的方法
  16. 华为nova7星耀版和华为nova7普通版 的区别 哪个好
  17. 常用工具类之jwt的学习使用
  18. python毕业设计 招聘大数据分析可视化
  19. CMS与前端页面SSI技术
  20. Mysql数据库表结构导出工具介绍

热门文章

  1. mysql 脱裤_mysql 脱裤(脱库)通用脚本 | 学步园
  2. 设计一个H5编辑器的数据模型和核心功能
  3. Kaggle无法出现人机验证的解决办法
  4. 19.猜数字的游戏:随机生成数字与输入数字进行比较
  5. CAMERA效果中有关SHADING的概述
  6. mui短信验证html,mui登录界面(验证)
  7. Nuxt - 自定义配置修改顶部加载条颜色(loding)
  8. lwIP TCP/IP 协议栈笔记之十五: TCP协议
  9. dw css定位,Dreamweaver中层的定位
  10. Gartner:新兴技术成熟度曲线2018(中文—历年)