admin管理员组

文章数量:1130349

Valgrind 学习篇 – memcheck

瓦尔格隆德

本文只是对memcheck进行学习

学习资料:

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

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

  • CSDN 博文 :

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

https://blog.csdn/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/docs/manual/QuickStart.html

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


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

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

或者
git clone git://sourceware/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>

Valgrind 学习篇 – memcheck

瓦尔格隆德

本文只是对memcheck进行学习

学习资料:

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

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

  • CSDN 博文 :

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

https://blog.csdn/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/docs/manual/QuickStart.html

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


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

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

或者
git clone git://sourceware/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>

本文标签: Valgrindmemcheck