Valgrind是一个在Linux操作系统下使用的开源工具,主要用于检测C/C++程序的内存泄露问题。它支持多种处理器架构,包括ARM、PowerPC、X86等,可以检测出程序中潜在的内存泄露、非法内存访问操作等。Valgrind由Valgrind开发小组开发,并遵循GNU项目的条款发布,完全免费。
Valgrind的优势
内存泄漏是C/C++程序设计中常见问题,如果不及时发现并解决这些问题,会导致程序执行效率下降,甚至引发程序崩溃。Valgrind通过跟踪程序的每一次内存分配和释放操作,检测出每一块内存块的使用情况,从而准确分析出程序中的内存泄露问题。同时,Valgrind还可以检测出程序当中不合理的内存读写操作,这些操作可能会导致程序异常或崩溃。因此,使用Valgrind可以大大提高程序调试的效率与质量,并最终构建出一个稳定高效的程序。
Valgrind的功能特性
1.内存泄漏检测:当程序执行结束时,Valgrind会自动扫描程序的运行轨迹,检测出程序中可能的内存泄露问题,包括未释放的堆内存、堆栈未释放的变量等。
2.非法内存访问检测:Valgrind在跟踪内存的同时,记录了每一个指针的使用情况。当程序访问非法的内存空间时,Valgrind会自动报告错误。
3.调试信息输出:Valgrind可以输出程序运行时的大量调试信息,包括每一个函数的栈跟踪信息、内存操作的指令信息、当前内存使用情况等等。
4.可扩展:Valgrind支持通过插件机制来扩展其功能,用户可以开发自己的插件来实现各种检测。
使用Valgrind检测内存泄露
使用Valgrind非常简单,只需要在命令行中输入命令即可。以下是基本使用命令:
valgrind [options] [executable-file [executable-args]]
其中,executable-file为可执行文件名,executable-args为参数,[options]为参数选项。默认情况下,Valgrind会检测程序的所有内存泄漏问题,并输出相应的信息。可以使用选项显式指定Valgrind的特定功能。
例如,以下命令输出程序中的详细内部堆栈信息和执行时间:
valgrind –leak-check=full –show-reachable=yes ./executable
使用Valgrind需要按照以下步骤:
1.编译程序的时候需要加上-fPIC选项,否则Valgrind无法正确检测内存泄漏;
2.在命令行中输入上述命令即可检测出程序中的内存泄露问题。
内存泄漏是C/C++编程中很常见的问题,有时候程序员难以及时发现问题的根源。Valgrind工具可以用来辅助程序员进行内存泄漏问题的检查和定位,提高程序的稳定性和质量。Valgrind有着良好的跨平台性,容易上手和使用,是C/C++开发者调试和优化程序不可或缺的工具之一。
相关问题拓展阅读:
在Linux中运行的C程序出现内存泄漏现象,怎么解决?
内存泄露就是你申请的内存块成功了,但是你却找不到它在哪里。那么以后怎么释放它呢?很显然释放不了,但确实那块内存被占用了,别的程序用不了,占着茅坑不拉屎就是这个意思懂了吧。
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
可以使用相应的软件测试工具对软件进行检测。
1. ccmalloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。
2. DMAlloc-Debug Malloc Library.
3. Electric
Fence-Linux分发版中由Bruce Perens编写的malloc()调试库。
4. Leaky-Linux下检测内存泄漏的程序。
5. LeakTracer-Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。
6. MEMWATCH-由Johan
Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过gcc的precessor来进行。
7. Valgrind-Debugging and profiling Linux programs, aiming at
programs written in C and C++.
8. KCachegrind-A visualization tool for the profiling>服务器整合用途。JProfiler直觉式的GUI让你可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。4.3.2注册码:A-G666#76114F-1olm9mv1i5uuly#0126
21. BEA JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得更高的性能。
22. SciTech Software AB .NET Memory
Profiler-找到内存泄漏并优化内存使用针对C#,VB.Net,或其它.Net程序。
23. YourKit .NET & Java Profiler-业界领先的Java和.NET程序性能分析工具。
24. AutomatedQA AQTime-AutomatedQA的获奖产品performance profiling和memory
debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和
GNU编译器。可以为.NET和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。支持.Net
1.0,1.1,2.0,3.0和Windows 32/64位应用程序。
25. JavaScript Memory Leak Detector-微软全球产品开发欧洲团队(Global Product
Development- Europe team, GPDE)
发布的一款调试工具,用来探测JavaScript代码中的内存泄漏,运行为IE系列的一个插件。

char *temp=malloc(1024*1024*300);
delete temp;
因为没有手动释放
Ubuntu:valgrind嵌入式平台内存测试
1、tar xvf valgrind-3.13.0.tar.bz2
2、cd valgrind-3.13.0
3、交叉编译:由于valgrind需要运行在目标板上,所以需要交叉编译成arm版本。
先在本地机上进行编译,修改configure: armv7*) 改成armv7*|arm*)
4、./configure –host=arm-linux CC=arm-none-linux-gnueabi-gcc CPP=arm-none-linux-gnueabi-cpp CXX=arm-none-linux-gnueabi-g++ –prefix=/
注意:–prefix=/ 这里编译后的结果在根目录,后面 所有 配置要与其凯大一致
6、Make install
7、拷贝文件根目录下生成文件到目标板对应的文件夹内,包括在4个文件夹内:/bin、/include、/lib、/share
8、–prefix=/指定的目录要与开发板上放置的目录一致,不然运行valgrind时可能会出现“valgrind: failed to start tool ‘memcheck’ for platform ‘arm-linux’: No such file or directory”错误
9、从派孙雹主机拷贝文件ld-2.8.so替换目标板的相应文件。
图形化结果分析工具:qcachegrind
按照程序自带的redmine安装,联网安装,缺少尘帆啥就安装啥。
1、先安装QT
tar-xzvfqt-everywhere-opensource-src-4.8.7.tar.gz
cdqt-everywhere-opensource-src-4.8.7
./configure选择‘o’,然后yes接受协议,稍等一会中间可能需要安装libxtst-dev,apt-get安装即可。
makeinstall安装完毕,测试是否成功安装
cd/usr/local/Trolltech/Qt-4.8.7qt安装在这个文件夹
./qmake-v如果出来版本信息说明安装成功
2、再安装qcachegrind
解压后,qmake,再make。按照redmine操作。
linux c valgrind的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux c valgrind,Linux C程序内存泄露检测工具Valgrind简介,在Linux中运行的C程序出现内存泄漏现象,怎么解决?,Ubuntu:valgrind嵌入式平台内存测试的信息别忘了在本站进行查找喔。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
C++内存越界导致的崩溃有什么好的检查方法吗
小白路过对内存进行操作,无非就是读写读崩溃,写崩溃不知道,期待答案如果是一个很大的公共内存或者超慢超烂的机器运行让多个线程同时写一个内存,慢镜头,不知道会不会秀逗分时系统,搞不懂或者现在都N核M线程,并行运算那种,并行读写公共内存
如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测
使用 Valgrind Memcheckmemcheck工具的使用方式如下:valgrind --tool=memcheck ./从上面的命令可以清楚的看到, 主要的命令是valgrind,而我们想使用的工具是通过-tool选项来指定的. 上面的‘’指的是我们想使用memcheck运行的可执行文件.该工具可以检测下列与内存相关的问题 :未释放内存的使用对释放后内存的读/写对已分配内存块尾部的读/写内存泄露不匹配的使用malloc/new/new[] 和 free/delete/delete[]重复释放内存注意: 上面列出的并不很全面,但却包含了能被该工具检测到的很多普遍的问题.让我们一个一个地对上面的场景进行讨论:注意: 下面讨论的所有测试代码都应该使用gcc并且加上-g选项(用来在memcheck的输出中生成行号)进行编译. 就想我们之前讨论过的 C程序被编译成可执行文件, 它需要经历四个不同的阶段蓝波湾翻译于 1 年 前0人顶顶 翻译的不错哦!1. 使用未初始化的内存Code :#include
如何在 Linux 下检测内存泄漏
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。 内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。 可以使用相应的软件测试工具对软件进行检测。 1. ccmalloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。 2. Dmalloc-Debug Malloc Library.3. Electric Fence-Linux分发版中由Bruce Perens编写的malloc()调试库。 4. Leaky-Linux下检测内存泄漏的程序。 5. LeakTracer-Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。 6. MEMWATCH-由Johan Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过gcc的precessor来进行。 7. Valgrind-Debugging and profiling Linux programs, aiming at programs written in C and C++.8. KCachegrind-A visualization tool for the profiling data generated by Cachegrind and Calltree.9. Leak Monitor-一个Firefox扩展,能找出跟Firefox相关的泄漏类型。 10. IE Leak Detector (Drip/IE Sieve)-Drip和IE Sieve leak detectors帮助网页开发员提升动态网页性能通过报告可避免的因为IE局限的内存泄漏。 11. Windows Leaks Detector-探测任何Win32应用程序中的任何资源泄漏(内存,句柄等),基于Win API调用钩子。 12. SAP Memory Analyzer-是一款开源的JAVA内存分析软件,可用于辅助查找JAVA程序的内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。 13. DTrace-即动态跟踪Dynamic Tracing,是一款开源软件,能在Unix类似平台运行,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。 14. IBM Rational PurifyPlus-帮助开发人员查明C/C++、托管、Java和VB6代码中的性能和可靠性错误。 PurifyPlus 将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。 15. Parasoft Insure++-针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。 并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。 能作为Microsoft Visual C++的一个插件运行。 16. Compuware DevPartner for Visual C++ BoundsChecker Suite-为C++开发者设计的运行错误检测和调试工具软件。 作为Microsoft Visual Studio和C++ 6.0的一个插件运行。 17. Electric Software GlowCode-包括内存泄漏检查,code profiler,函数调用跟踪等功能。 给C++和开发者提供完整的错误诊断,和运行时性能分析工具包。 18. Compuware DevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。 19. Quest JProbe-分析Java的内存泄漏。 20. ej-technologies JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。 它把CPU、执行绪和内存的剖析组合在一个强大的应用中。 JProfiler可提供许多IDE整合和应用服务器整合用途。 JProfiler直觉式的GUI让你可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。 4.3.2注册码:A-G666#F-1olm9mv1i5uuly#. BEA JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。 22. SciTech Software AB Memory Profiler-找到内存泄漏并优化内存使用针对C#,,或其它程序。 23. YourKit & Java Profiler-业界领先的Java和程序性能分析工具。 24. AutomatedQA AQTime-AutomatedQA的获奖产品performance profiling和memory debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和 GNU编译器。 可以为和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。 支持 1.0,1.1,2.0,3.0和Windows 32/64位应用程序。 25. JavaScript Memory Leak Detector-微软全球产品开发欧洲团队(Global Product Development- Europe team, GPDE) 发布的一款调试工具,用来探测JavaScript代码中的内存泄漏,运行为IE系列的一个插件。
发表评论