200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【Linux】内存检测工具Valgrind

【Linux】内存检测工具Valgrind

时间:2021-02-05 12:06:58

相关推荐

【Linux】内存检测工具Valgrind

内存检测工具Valgrind

Valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,作者是获得过Google-O’Reilly开源大奖的Julian Seward,它包含一个内核——一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务——调试,分析,测试等。

内存检测,使用它的Memcheck工具。

Valgrind安装

官网

ubuntu

sudo apt-get install valgrind

Memcheck检测范围

Memcheck用来检测C/C++程序中出现的内存问题,所有对内存的读写都会被检测到,一切malloc()/free()/new/delete的调用都会被捕获,所以,它能检测以下问题:

对未初始化内存的使用;读/写释放后的内存块读/写超出malloc等分配的动态内存范围读/写不适当的栈中内存块内存泄漏,指向一块内存的指针丢失不正确的malloc/free或new/delete匹配memcpy()相关函数中的dst和src指针重叠问题

Memcheck检查步骤及注意事项

在编译程序的时候打开调试模式(gcc编译器的-g选项),以便显示行号,编译时去掉-O1 -O2等优化选项,检查的是C++程序的时候,考虑加上选项:-fno-inline,这样它的函数调用链接会很清晰。执行:

valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./YourProgram

程序运行结束,打开log.txt查看结果。

结果分析

Valgrind(memcheck)包含这7类错误

illegal read/illegal write errors —— 非法读取/非法写入错误use of uninitialised values —— 使用未初始化的区域use of uninitialised or unaddressable values in system calls —— 系统调用时使用了未初始化或不可寻址的地址illegal frees —— 非法的释放when a heap block is freed with an inappropriate deallocation function —— 分配和释放函数不匹配overlapping source and destination blocks —— 源和目的内存块重叠memory leak detection —— 内存泄漏检测 Still reachable —— 内存指针还在,还有机会使用或者释放,指针指向的动态内存还没有被释放就退出了Definitely lost —— 确定的内存泄露,已经不能够访问这块内存Indirectly lost —— 指向该内存的指针位于内存泄露处Possibly lost —— 可能的内存泄露,仍然存在某个指针能够访问某块内存,但该指针指向的已经不是该内存首位置Suppressed —— 某些库产生的错误不予以提示,这些错误会被统计到suppressed项目

示例

产生错误的代码:

#include <stdlib.h>void f(void){int *x = malloc(10*sizeof(int));x[10] = 0;//越界访问//内存没释放}int main(void){f();return 0;}

编译:

gcc -g demo.c -o demo

检测:

valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./demo

查看错误:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。