




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、 概述Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。是一个运行时诊断工具,它可以监视一个指定程序的活动并打印出代码中可能存在的各种各样的内存管理问题。它用来检查程序的内存使用状况,尤其是对没有明显特征的内存越界、内存泄露等在测试中不能直观检查的情况,效果明显。这款工具是运行在linux下的,可以用来定位c/c+程序中内存使用方面的错误。包括:内存泄漏、使用未初始化的内存、读/写已释放的内存、读/写内存越界、使用malloc/new/new和free/delete/delete不匹配,等等。Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-OReilly开源代码奖。到3.3.0版本为止,Valgrind支持x86、x86-64以及PowerPC上的Linux。除此之外,还有一些其它非正式支持的类Unix平台(如FreeBSD、NetBSD以及Mac OS X)。valgrind官方网站:/,是一款open source软件。Valgrind遵守GNU通用公共许可证条款,是一款自由软件。二、 安装a) 可以直接到valgrind官网下载源码编译、安装,由于valgrind编译依赖很多其他库,直接下载安装会比较耗时。推荐使用Jumbo包管理工具安装。valgrind官网:/b) Jumbo安装:直接在测试机上运行如下命令即可:Jumbo wiki链接:/bash -c $( curl /install_jumbo.sh ); source /.bashrcc) 使用Jumbo搜索、安装valgrind,命令如下:jumbo search valgrindjumbo install valgrindd) Valgrind安装完毕,可使用valgrind version查看版本信息,如下图:三、 使用a) 使用valgrind启动被测系统,以upps为例,修改upps启动脚本,如下:b) 用法: valgrind options prog-and-args options。参数解释如下:l 常用选项,适用于所有Valgrind工具:-tool= 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。h help 显示帮助信息。-version 显示valgrind内核的版本,每个工具都有各自的版本。q quiet 安静地运行,只打印错误信息。v verbose 更详细的信息, 增加错误数统计。-trace-children=no|yes 跟踪子线程? no-track-fds=no|yes 跟踪打开的文件描述?no-time-stamp=no|yes 增加时间戳到LOG信息? no-log-fd= 输出LOG到描述符文件 2=stderr-log-file= 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID-log-file-exactly= 输出LOG信息到 file-log-file-qualifier= 取得环境变量的值来做为输出信息的文件名。 none-log-socket=ipaddr:port 输出LOG到socket ,ipaddr:portl LOG信息输出选项:-xml=yes 将信息以xml格式输出,只有memcheck可用-num-callers= show callers in stack traces -error-limit=no|yes 如果太多错误,则停止显示新错误? yes-error-exitcode= 如果发现错误则返回错误代码 0=disable-db-attach=no|yes 当出现错误,valgrind会自动启动调试器gdb。no-db-command= 启动调试器的命令行选项gdb -nw %f %pl 适用于Memcheck工具的相关选项:-leak-check=no|summary|full 要求对leak给出详细信息? summary-leak-resolution=low|med|high how much bt merging in leak check low-show-reachable=no|yes show reachable blocks in leak check? noc) 启动程序后,对程序进行发送query,query的量根据程序本身的情况来确定,基本省覆盖所有回归功能的query,以及部分的随机query。以压力的形式发送到待测试的程序。在这个过程中valgrind会将程序走到路径的异常情况记录下来,并且给出详细的调用关系记录,以及出错的地方在什么地方。四、 日志分析a) Valgrind记录文件的主要错误有以下几种:-内存未初始化:Conditional jump or move depends on uninitialised value-读写越界:Invalid read/write of size-内存泄露:definitely lost-原串与目标串内存交叠:Source and destination overlap in strcpy/memcpy-非法释放或者删除:Invalid free() / delete / delete-含义和5相同:Mismatched free() / delete / delete五、 注意a) valgrind本身有一些无法检查的错误:-Valgrind可以检查堆内存越界和内存泄露,可以检查简单的堆栈溢出且出core的问题,但是无法检查栈内存越界。 -堆栈错误出现了core,所以valgrind可以检测到错误信息,但是由于堆栈已经被破坏,无法准确还原真实的函数调用栈。 -对于全局指针,进程在收到15信号后是不进行释放,但是对应的内存有可能被系统回收。 -对于所有指针,进程在收到9信号后理解退出,valgrind无法决定是否有内存泄漏。不建议强制停止被测系统进程,否则根据系统退出之后valgrind日志不能准确判断是否存在内存泄漏。b) Valgrind需要有实际的数据运行到相应的分支,产生相应的问题,才能对问题进行记录,不论是读写越界,还是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 诺如呕吐包培训知识课件
- 请你到我家玩课件
- 说课课件精美句子简短
- 误食异物安全知识培训
- 2025小学聘用校长合同示范文本
- 2025制作购销合同书
- 2025企业合同范本:是否可以要求所有员工签订全勤劳动合同
- 2025石墨销售合同模板
- 2025初中语文生活美文:婚姻如合同爱情似艺术
- 2025车辆买卖合同模板
- 原发性乳腺癌规范化诊疗指南
- 2025年“健康中国”战略下医疗健康产业投资趋势报告
- 心脏肿瘤影像诊断与诊疗进展
- 旋挖钻孔灌注桩施工流程课件
- 《混凝土浇筑施工技术交底》课件
- 甘肃武威2025年公开招聘农村党务(村务)工作者笔试题带答案分析
- 内科常见疾病护理常规
- 钣金车间生产培训
- 人工智能的深度解析与浅显介绍
- 摩托车协议买卖合同模板
- 2024年全国体育单独统一招生考试语文试卷附答案
评论
0/150
提交评论