当前位置: 首页 > 工具软件 > Valgrind > 使用案例 >

valgrind java_valgrind

洪浩波
2023-12-01

来源地址:Valgrind Home​valgrind.org

为什么使用valgrind?Valgrind Home为什么使用valgrind?Valgrind将为您节省数小时的调试时间。使用Valgrind工具,您可以自动检测许多内存管理和线程错误。

Valgrind可以帮助你加速你的程序。使用Valgrind工具,您还可以执行非常详细的分析,以帮助找到程序中的瓶颈。

Valgrind很容易使用。Valgrind使用动态二进制检测,因此您不需要修改、重新编译或重新链接应用程序。只要在你的命令行前面加上valgrind,一切就可以了。

Valgrind不是玩具。Valgrind首先是一个用于大型复杂程序的调试和分析系统。我们已经收到了来自用户的反馈,这些用户正在处理多达2500万行代码的项目。它已被用于各种规模的项目,从单用户个人项目到数百名程序员的项目。

Valgrind适用于任何类型的软件。Valgrind已用于桌面应用程序、图书馆、数据库、游戏、web浏览器、网络服务器、分布式控制系统、虚拟现实框架、事务服务器、编译器、解释器、虚拟机、电信应用程序、嵌入式软件、医疗成像、科学程序、信号处理程序、视频/音频程序、商业智能软件、金融/银行软件、操作系统守护程序等。

Valgrind被广泛使用。世界各地成千上万的程序员都在使用Valgrind。我们收到了来自30多个国家的用户的反馈。

Valgrand可用于任何语言编写的程序。由于Valgrand直接与程序二进制文件一起工作,所以它可以处理用任何编程语言编写的程序,无论是编译的程序,只是及时编译的程序,还是解释的程序。Valgrand工具主要针对C语言和C++语言编写的程序,因为用这些语言编写的程序往往有最多的错误!但是,例如,它可以用来调试和分析用混合语言编写的系统。Valgrind已经被用于部分或全部以C、C++、java、perl、python、汇编代码、fortran、ADA和许多其他程序编写的程序。

Valgrind提供100%的用户空间代码覆盖率,甚至在系统库中也是如此。你甚至可以在没有源代码的程序上使用Valgrind。

Valgrind是可扩展的。任何人都可以编写强大的新工具,为程序添加任意指令插入。这比从头开始编写这样的工具要容易得多。这使得Valgrind非常适合尝试新的程序分析工具。剑桥大学、麻省理工学院、加州大学伯克利分校、加州大学圣巴巴拉分校、卡内基梅隆大学、康奈尔大学、新墨西哥大学、澳大利亚国立大学、墨尔本大学、杜明琴(慕尼黑)和格拉茨理工大学的人将其用于研究目的。

Valgrind得到积极维护。Valgrind开发人员一直致力于修复bug,改进Valgrind,并确保它在新的Linux发行版和库问世时能够正常工作。也有邮件列表,你可以订阅,并联系如果你有问题。

那有什么问题?主要的一点是,在Valgrind下,程序的运行速度要慢得多。根据使用的工具不同,减速系数的范围为5-100。这种减速类似于类似的调试和分析工具。但既然你不必一直使用Valgrind,这通常不是什么大问题。调试所节省的时间将远远弥补它。

什么时候使用valgrind?

这取决于你的具体需要。下面是一些人们使用Valgrind的bug检测工具的例子。

对于运行时间较短的小程序,在开发时,您总是可以在Valgrind工具(通常是Memcheck)下运行程序,知道内存错误会立即被发现。

在自动测试中。通过在自动单元、集成、系统或回归测试中使用Valgrind工具,您可以确信没有任何代码会被取消检查。

在大的改变之后,以确保新代码中没有引入新的bug。

当出现错误时。立即获得关于错误是什么、在哪里发生以及原因的反馈。

工具集

Memcheck

MeMebug检测内存管理问题,主要针对C和C++程序。当一个程序在Memcheck的监督下运行时,所有的内存读写都会被检查,对malloc/new/free/delete的调用都会被拦截。因此,Memcheck可以检测您的程序是否:

访问不应该访问的内存(尚未分配的区域、已释放的区域、超过堆块末尾的区域、堆栈的不可访问区域)。

以危险的方式使用未初始化的值。

泄露内存。

对堆块执行错误的释放(双释放、不匹配的释放)。

将重叠的源和目标内存块传递给memcpy()和相关函数。

一旦这些错误发生,Memcheck就会立即报告,给出发生错误的源行号,以及到达该行所调用函数的堆栈跟踪。Memcheck在字节级别跟踪可寻址性,在位级别跟踪值的初始化。因此,它可以检测单个未初始化位的使用,并且不会报告位域操作中的伪错误。Memcheck运行的程序比正常速度慢10-30倍。

Cachegrind

Cachegrind是一个缓存分析器。 它可以对CPU中的I1,D1和L2缓存进行详细的模拟,因此可以准确地指出代码中的缓存未命中源。它以功能,模块和整个程序的摘要来标识为每一行源代码执行的高速缓存未命中次数,内存引用和指令数量。 对于以任何语言编写的程序,它都很有用。 Cachegrind运行程序的速度比正常运行慢20--100倍。

Callgrind

Josegri Weidendorfer的Callgrind是Cachegrind的扩展。 它提供了Cachegrind所做的所有信息,以及有关调用图的其他信息。 它已折叠到3.2.0版的主要Valgrind发行版中。单独提供的还有一个了不起的可视化工具KCachegrind,它可以更好地概述Callgrind收集的数据。 它也可以用于可视化Cachegrind的输出。

Missif

Massif是堆分析器。 它通过对程序堆进行定期快照来执行详细的堆分析。 它生成一个图表,显示随时间推移的堆使用情况,包括有关程序的哪些部分负责最多内存分配的信息。 该图由文本或HTML文件补充,该文本或HTML文件包含更多信息,用于确定将最大内存分配到的位置。 Massif运行的程序比正常运行慢约20倍。

Helgrind

DRD

DRD是用于检测多线程C和C ++程序中的错误的工具。 该工具适用于任何使用POSIX线程原语或使用在POSIX线程原语之上构建的线程概念的程序。 尽管Helgrind可以检测到违反锁命令的情况,但对于大多数程序而言,DRD需要较少的内存来执行其分析。

DHAT

DHAT是一个用来检查程序如何使用堆分配的工具。它跟踪分配的块,并检查每个内存访问,以找到它要访问的块(如果有的话)。它附带了一个GUI,以便于浏览概要文件结果。

 类似资料:

相关阅读

相关文章

相关问答