1. 简介
Valgrind 套件提供了大量的调试和profile工具,帮助我们使自己的程序跑得更快、更准确。这些工具最流行的名字是Memchek。它可以检测到一些与内存相关的错误,这些错误在C或者C++中经常遇到,这些错误可能会导致一些灾难性的后果。
本文简要的讲述如何使用Memcheck进行内存检测。如果有兴趣可以继续看看Valgrind的用户手册。
2. 准备你自己程序
使用-g选项编译你的程序,这样会产生一些调试信息,使用这些信息Valgrind将会精确的查找到错误在源文件的哪一行中。当然也可以使用-O0(如果你可以忍受执行速度下降的话)。如果使用-O1的话,在“错误信息”中显示的行号可能不是很精确。不过一般来讲,使用-O1,Memcheck也会正常工作,并且它可以获得更高的速度。不推荐使用-O2.
3. 使用Memcheck运行你的程序
一般我们会这样运行我们的程序:
myprog arg1 arg2
使用下面的命令:
valgrind --leak-check=yes myprog arg1 arg2
默认的工具就是Memcheck ,--leak-check 选项打开了详细的内存泄漏检测器。
我们的程序可能比平时跑得要慢些,大约慢20-30倍。Memcheck将会给出一些关于内存错误和泄漏的信息。
4. Memcheck输出信息的解释
给出一个C程序,暂且称为a.c, 他又一个内存错误和一个内存泄漏。
#include <stdlib.h>
void f(void)
{
int* x = malloc(10 * sizeof(int));
x[10] = 0; // problem 1: heap block overrun
} // problem 2: memory leak -- x not freed
int main(void)
{
f();
return 0;
}
这样编译一下:
gcc -O0 -g a.c
然后这样执行:
valgrind --leak-check=full ./a.out
下面给出他的执行结果的部分内容,显示的是:problem 1: heap block overrun
==12425== Invalid write of size 4
==12425== at 0x400542: f (a.c:7)
==12425== by 0x400552: main (a.c:12)
==12425== Address 0x51ef068 is 0 bytes after a block of size 40 alloc'd
==12425== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12425== by 0x400535: f (a.c:6)
==12425== by 0x400552: main (a.c:12)
需要注意的是
- 在每个错误信息中有很多内容,一定要小心阅读。
- 12425是进程ID号,一般不重要
- 第一行讲的是错误的类型。
- code address 通常并不重要
分享到:
相关推荐
在linux下使用内存检测工具valgrind对程序进行内存泄露检测及绘制函数调用关系。
基于mips的valgrind安装与使用.txt
Valgrind用来调试C++程序的内存问题,比如内存泄露。本文档是Valgrind的使用手册。
内存检查工具valgrind 的使用方法,通过valgrind 可以检查程序中的内存情况。
亲测可以正常使用的valgrind在android板子上使用,对于需要用valgrind检测内存泄漏等问题的开发者有参考价值。
dpdk-valgrind 允许在 dpdk-1.8.0 应用程序上使用 valgrind-3.10.0+ 的更改(否则 mmap() 调用失败并带有 -EINVAL); 如果缓冲区溢出从大页面消失,可能会有所帮助 从 dpdk.org 克隆的存储库
valgrind安装与使用
写的qt程序为hello,然后运行命令为:valgrind ./hello,然后就报了如下错误: ==32140== ==32140== Process terminating with default action of signal 11 (SIGSEGV) ==32140== General Protection Fault ==...
Valgrind的简介和使用方法,介绍了Valgrind的使用以及如何进行程序检查
Valgrind是一个构建动态分析工具的框架。有Valgrind工具可以自动检测许多内存管理并线程化错误,并详细分析您的程序。你也可以使用Valgrind建立新的工具。
valgrind安装包 安装步骤 安装说明;以及一些检查内存泄漏的用法
valgrind的使用方法-详细手册
valgrind是一款运行在linux下的,用来定位c/c++程序中内存使用方面的错误的工具,包括:内存泄漏、使用未初始化的内存、读/...四、Valgrind使用方法 五、Valgrind使用参数 六、举例:valigrind在isearch3.2测试中的应用
介绍algrind的安装与使用方法,通过对内存错误的各种出错信息的认识,帮助使用者正确使用valgrind工具。是在ubuntu上编辑的,请在ubuntu上打开 参考:https://blog.csdn.net/u012662731/article/details/78652651 ...
valgrind-3.15.0的官方使用手册 valgrind-3.15.0的官方使用手册 valgrind-3.15.0的官方使用手册
适用于macOS的Valgrind ... 现在,您可以正常使用valgrind了。 注意:如果在构建过程中失败,请。 更新资料 现在,任何LouisBrunner/valgrind brew upgrade都将正确地重建最新的LouisBrunner/valgri
为学生提供生物和信息的网站泄漏检查器:小型Web应用程序以及CGI脚本,可从源代码构建可执行文件并使用valgrind对其进行测试以检查内存泄漏
valgrind内存检测工具使用方法: adb push .\valgrind-arm\Inst\data\local\Inst /data/local #adb shell #cd /data/local/Inst /data/local/Inst # chmod -R 777 bin /data/local/Inst # chmod -R 777 lib LD_...
valgrind