
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程序出现内存泄漏现象,怎么解决?
- Ubuntu:valgrind嵌入式平台内存测试
在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 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++、托管.NET、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++和.Net开发者提供完整的错误诊断,和运行时性能分析工具包。
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#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系列的一个插件。
#include
#include
int main()
{
char *temp=malloc(1024*1024*300);
delete temp;
return 0;
}
因为没有手动释放
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=/ 这里编译后的结果在根目录,后面 所有 配置要与其凯大一致
5、make
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 -xzvf qt-everywhere-opensource-src-4.8.7.tar.gz
cd qt-everywhere-opensource-src-4.8.7
./configure选择‘o’,然后yes接受协议,稍等一会中间可能需要安装libxtst-dev,apt-get安装即可。
make
make install安装完毕,测试是否成功安装
cd /usr/local/Trolltech/Qt-4.8.7 qt安装在这个文件夹
cd bin
./qmake -v如果出来版本信息说明安装成功
2、再安装qcachegrind
解压后,qmake,再make。按照redmine操作。
linux c valgrind的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux c valgrind,Linux C程序内存泄露检测工具Valgrind简介,在Linux中运行的C程序出现内存泄漏现象,怎么解决?,Ubuntu:valgrind嵌入式平台内存测试的信息别忘了在本站进行查找喔。
香港服务器首选树叶云,2H2G首月10元开通。
树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/196965.html<