用valgrind调试有优化执行程序的功能吗

用valgrind调试有优化执行程序的功能吗,第1张

Valgrind的使用非常简单,valgrind命令的格式如下:valgrind[valgrind-options]your-prog[your-progoptions]一些常用的选项如下:-h--help显示帮助信息。--version显示valgrind内核的版本,每个工具都有各自的版本。-q--quiet安静地运行,只打印错误信息。-v--verbose打印更详细的信息。--tool=[default:memcheck]最常用的选项。运行valgrind中名为toolname的工具。如果省略工具名,默认运行memcheck。--db-attach=[default:no]绑定到调试器上,便于调试错误。我们通过例子看一下它的具体使用。我们构造一个存在内存泄漏的C程序,如下:#include#includeint*Test(void){int*x=malloc(10*sizeof(int))deletex//problem1:heapblockoverrun,problem2:memoryleak--xnotfree,onlyfirstaddressreturnx}intmain(void){intcountTest()printf("i=%d/n",count)//problem3:useuninitialisedvalue.return0}$gcc-Wall-oTestTest.c$valgrind--tool=memcheck./Test$valgrind--tool=memcheck--leak-check=yes./Test三、安装sudoapt-getinstallvalgrindLinux下Valgrind的使用概述Linux下利用Valgrind工具进行内存泄露检测和性能分析Ubuntu内存泄漏检测工具Valgrind的安装Valgrind--Linux下的内存调试和代码解剖工具应用Valgrind发现Linux程序的内存问题关于Linux基础学习的问题,请查阅书籍《Linux就该这么学》

内存错误检测器

时间剖析器

空间剖析器

其中又数“内存错误检测器”最为强大。

下面介绍如何在ubuntu上安装和使用valgrind。

步骤一:确保valgrind已被安装

sudo apt-get install valgrind

步骤二:去除所有旧的valgrind日志

rm valgrind.log.*

步骤三:在命令memcheck下,启动程序

G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind -v --tool=memcheck --leak-check=full --num-callers=40 --log-file=valgrind.log <program><arguments>

步骤四:程序启动后会持续一段时间,因为valgrind需要执行许多内存检测。

步骤五:想尽一切办法重现问题。

步骤六:如生成多个日志文件,需打包

tar -zcf valgrind-logs-<program>.tar.gz valgrind.log.*

步骤七:将valgrind-logs-<program>.tar.gz中的完整valgrind输出放入bug report中

Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的malloc和free或者 C++中的new和 delete。使用Valgrind的工具包,你可以自动的检测许多内存管理和线程的bug,避免花费太多的时间在bug寻找上,使得你的程序更加稳固。

Valgrind的主要功能

Valgrind工具包包含多个工具,如Memcheck,Cachegrind,Helgrind, Callgrind,Massif。下面分别介绍个工具的作用:

Memcheck 工具主要检查下面的程序错误:

使用未初始化的内存 (Use of uninitialised memory)

使用已经释放了的内存 (Reading/writing memory after it has been free’d)

使用超过 malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)

对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)

申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever)

malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])

src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11674582.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存