Valgrind 学习篇 -- memcheck

Valgrind 学习篇 – memcheck

瓦尔格隆德

本文只是对memcheck进行学习

学习资料:

  • 官网主页: http://valgrind.org/

  • Valgrind用户手册 : http://valgrind.org/docs/manual/manual.html

  • CSDN 博文 :

https://blog.csdn.net/andylauren/article/details/93189740

https://blog.csdn.net/u010122972/article/details/78214174

一、Valgrind

Valgrind是GPL的系统,用于调试和分析Linux程序。

  1. 自动检测许多内存管理和线程错误;
  2. 执行非常详细的性能分析;
  3. 可以在没有源代码的程序上使用Valgrind
  4. Valgrind可在几种流行的平台上运行,例如 x86/Linux, AMD64/Linux and PPC32/Linux

二、Valgrind的工具套件 (Tool Suite)

2.1 Memcheck

内存检查

Memcheck可检测内存管理问题,并且主要针对C和C++程序。在Memcheck的监视下运行程序时,将检查所有内存读取和写入,并拦截对malloc / new / free / delete的调用。

  • 访问它不应该访问的内存(尚未分配的区域,已释放的区域,堆块末尾的区域,堆栈的不可访问区域)。
  • 以危险的方式使用未初始化的值。
  • 泄漏内存。
  • 释放堆块的不良释放(两次释放,不匹配的释放)。
  • 将重叠的源和目标内存块传递给memcpy()和相关函数。

重叠src和 dst指针 memcpy以及相关功能。

Memcheck会在发生这些错误时立即报告这些错误,并给出发生错误的源代码行号,以及为达到该行而调用的函数的堆栈跟踪。

  1. Memcheck运行的程序比正常运行慢大约10–30倍。
  2. Memcheck不对全局数组或堆栈数组进行边界检查。
  3. 检查所有支持的动态链接库(包括C库,图形库等)中的代码。
2.2 Cachegrind

Cachegrind是一个缓存分析器。它可以对CPU中的I1,D1和L2缓存进行详细的仿真,因此可以准确地指出代码中的缓存未命中源。

2.3 Callgrind

它提供了Cachegrind所做的所有信息,以及有关调用图的其他信息。

2.4 Massif

Massif是堆分析器。包括有关程序的哪些部分负责最多内存分配的信息。

2.5 Helgrind

Helgrind是一个线程调试器,可在多线程程序中查找数据竞争。

2.6 等等其他tool

三、文档

http://valgrind.org/docs/manual/QuickStart.html

用户文档: http://valgrind.org/docs/manual/manual-core.html


四、一个运行示例 (An Example Run)

4.1 安装
安装包网址 : http://www.valgrind.org/downloads/current.html

或者
git clone git://sourceware.org/git/valgrind.git

下载源码、下载文档


tar jxvf valgrind-3.15.0.tar.bz2

cd valgrind-3.15.0/

./configure

make

make install

//验证是否安装成功
valgrind --version

4.2 写源码
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char *argv[]){    
    // int x = 1;
    int x;
    printf("x [%d]\n\n", x);  //1、使用未初始化的变量

    char * str1 = malloc(10);   //2、未释放的内存、内存泄漏

    char * str2 = malloc(sizeof(int));
    free(str2);
    // free(str2);    //3、非法释放


    return 0
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值