游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

工具Valgrind仿真调试工具的使用

  Valgrind简介
  Valgrind是一套Linux下,开放源代码(GPLV2)的仿真调试工具的集合。
  Valgrind工具包包含多个工具,如Memcheck、Cachegrind、Helgrind、Callgrind、Massif。Memcheck工具
  Memcheck工具是Valgrind中最常用的工具,用来检测程序中出现的内存问题。它能检测如下问题:使用未初始化内存;使用释放后的内存;使用超出malloc分配的内存块;对堆栈的非法访问;内存泄漏;不正确的mallocfree或newdelete匹配;memcpy()相关函数中的dst和src指针重叠。Cachegrind工具
  Callgrind收集程序运行时的一些数据,函数调用关系等信息,还可以有选择地进行cache模拟。在运行结束时,它会把分析数据写入一个文件。callgrindannotate可以把这个文件的内容转化成可读的形式。Helgrind工具
  它主要用来检查多线程程序中出现的竞争问题。Helgrind寻找内存中被多个线程访问,而又没有一贯加锁的区域,这些区域往往是线程之间失去同步的地方,而且会导致难以发掘的错误。Helgrind实现了名为Eraser的竞争检测算法,并做了进一步改进,减少了报告错误的次数。Callgrind工具
  它模拟CPU中的一级缓存I1,D1和L2二级缓存,能够精确地指出程序中cache的丢失和命中。如果需要,它还能够为我们提供cache丢失次数,内存引用次数,以及每行代码,每个函数,每个模块,整个程序产生的指令数。这对优化程序有很大的帮助。Massif工具
  堆栈分析器,它能测量程序在堆栈中使用了多少内存,告诉我们堆块,堆管理块和栈的大小。
  Massif能帮助我们减少内存的使用,在带有虚拟内存的现代系统中,它还能够加速我们程序的运行,减少程序停留在交换区中的几率。
  Valgrind由内核(core)以及基于内核的其他调试工具组成。其基于仿真方式对程序进行调试,它先于应用程序获取实际处理器的控制权,并在实际处理器的基础上仿真一个虚拟处理器,并使应用程序运行于这个虚拟处理器之上,从而对应用程序的运行进行监视。
  应用程序并不知道该处理器是虚拟的还是实际的,已经编译成二进制代码的应用程序并不用重新进行编译,Valgrind直接解释二进制代码使得应用程序基于它运行,从而能够检查内存操作时可能出现的错误。所以在Valgrind下运行的程序运行速度要慢得多,而且使用的内存要多得多。因此,最好在性能好的机器上使用Valgrind,并且是在开发调试阶段使用。Valgrind安装
  Valgrind的安装方式很简单。我们首先查看一下我们的系统中有没有Valgrind:
  显然,我们这里的系统中没有Valgrind,按提示输入如下命令安装即可:sudoaptinstallvalgrind
  另外,也可以通过下载源码编译、安装。
  源码地址:
  http:valgrind。org
  下载源码的命令:wgethttp:valgrind。orgdownloadsvalgrind3。14。0。tar。bz2Valgrind使用
  准备一个有内存泄漏、内存越界问题的demo进行测试。为了方便,我们使用官方提供的一个经典的测试demo:
  valgrindtest。c:includestdlib。hvoidf(void){intxmalloc(10sizeof(int));x〔10〕0;problem1:heapblockoverrun}problem2:memoryleakxnotfreedintmain(void){f();return0;}
  这份代码存在两个问题:使用超出malloc分配的内存。内存泄漏。
  下面一起来使用valgrind的Memcheck工具来检测这份程序。
  首先,我们使用g编译程序以包含调试信息,以便Memcheck的错误消息包含确切的行号。gccgvalgrindtest。covalgrindtest
  使用valgrind检测valgrindtest程序:valgrindleakcheckyes。valgrindtest
  我们可以用tool参数指明使用的工具,如:toolmemcheck
  如果不明确设置tool参数,则valgrind的检测工具默认使用的是Memcheck工具。leakcheckyes选项打开详细的内存泄漏检测器。
  我们执行检测工具之后的结果如:
  7407Memcheck,amemoryerrordetector7407Copyright(C)20022017,andGNUGPLd,byJulianSewardetal。7407UsingValgrind3。13。0andLibVEX;rerunwithhforcopyrightinfo7407Command:。valgrindtest74077407Invalidwriteofsize47407at0x108668:f(valgrindtest。c:6)7407by0x108679:main(valgrindtest。c:11)7407Address0x522d068is0bytesafterablockofsize40allocd7407at0x4C2FB0F:malloc(inusrlibvalgrindvgpreloadmemcheckamd64linux。so)7407by0x10865B:f(valgrindtest。c:5)7407by0x108679:main(valgrindtest。c:11)740774077407HEAPSUMMARY:7407inuseatexit:40bytesin1blocks7407totalheapusage:1allocs,0frees,40bytesallocated7407740740bytesin1blocksaredefinitelylostinlossrecord1of17407at0x4C2FB0F:malloc(inusrlibvalgrindvgpreloadmemcheckamd64linux。so)7407by0x10865B:f(valgrindtest。c:5)7407by0x108679:main(valgrindtest。c:11)74077407LEAKSUMMARY:7407definitelylost:40bytesin1blocks7407indirectlylost:0bytesin0blocks7407possiblylost:0bytesin0blocks7407stillreachable:0bytesin0blocks7407suppressed:0bytesin0blocks74077407Forcountsofdetectedandsuppressederrors,rerunwith:v7407ERRORSUMMARY:2errorsfrom2contexts(suppressed:0from0)
  输出结果包含有很多信息,我们可以很容易查看到了关键的信息:
  其中,输出信息告诉我们无效地写入了4个字节,并且提示了可能出现问题的代码行数。堆栈跟踪告诉我们调用了一次malloc申请内存,但并没有free,并且指出了在哪里分配了内存。
  另外,这里的7407表示的是进程ID号。
  内存泄漏有几种类型,最重要的两类是:definitelylost(明确的泄漏)possiblylost(可能的泄漏)
  其中,明确的泄漏必须要进行修复。
  以上就是关于valgrind最常用的Memcheck工具的简单使用介绍,使用Memcheck工具有时候我们可以很清楚地检测出程序存在的一些隐患。其它工具今后有用到的话再做分享,大家感兴趣的话可以自行去研究学习。Valgrind交叉编译
  1、下载valgrind源码包:wgethttp:valgrind。orgdownloadsvalgrind3。14。0。tar。bz2
  2、修改valgrind里的configure文件:
  把armv7)改成armv7arm)。
  3、生成Makefile。configurehostarmlinuxgnueabihfCChomeLinuxZnToolChaingccarmlinuxgnueabihf6。2。1binarmlinuxgnueabihfgccCXXhomeLinuxZnToolChaingccarmlinuxgnueabihf6。2。1binarmlinuxgnueabihfgprefixPWDtmp
  这个命令似乎很长,但并不难,只是加了几个配置参数。这些配置参数怎么看?
  我们可以输入。configurehelp命令来查看支持的配置:
  下面我们依次来分析上面那个很长的命令:hostarmlinuxgnueabihf:表明了我们最终可执行文件运行的环境。CChomeLinuxZnToolChaingccarmlinuxgnueabihf6。2。1binarmlinuxgnueabihfgcc:这是指定我们的交叉编译工具armlinuxgnueabihfgcc,这里直接给出绝对路径。CXXhomeLinuxZnToolChaingccarmlinuxgnueabihf6。2。1binarmlinuxgnueabihfg:这是指定我们的交叉编译工具armlinuxgnueabihfg,这里直接给出绝对路径。prefixPWDtmp:指定安装的路径。表明安装路径在当前路径下的tmp文件夹中。
  这时候已经生成了Makefile文件:
  编译、安装:makemakeinstall
  安装完成后tmp文件夹下的内容为:
  这时候我们就可以把tmp整个文件夹拷到板子上使用了。tmp的大小为一百多兆,注意查看板子存储空间够不够:
  我们可以配置板子上的valgrind环境。如果仅是临时使用,可以这么用:tmpbinvalgrindtoolmemcheckleakcheckyes。valgrindtest
  其中,tmp文件夹与与valgrindtest在同一路径。这时候可能会报如下错误:valgrind:failedtostarttool‘memcheck’forplatform‘armlinux’:Nosuchfileordirectory
  这是因为valgrind需要依赖其动态库,而没有找到动态库。因为是临时测试,在valgrindtest路径输入如下命令进行设置:exportVALGRINDLIBtmplibvalgrind
  这只是在当前开发板终端生效,下次重新进入开发板终端需要重新设置。参考资料
  1、https:www。valgrind。orgdocsmanualquickstart。htmlquickstart。prepare
  2、https:blog。csdn。netandylaurenarticledetails93189740
  3、https:zhuanlan。zhihu。comp75416381
  4、https:blog。csdn。netlistener51articledetails86716497?depth1
  猜你喜欢:
  分享几款优秀的绘图工具
  实用分享几个非常实用的开源项目
  C语言、嵌入式重点知识:回调函数
  嵌入式必备之Git的使用
  1024G嵌入式资源大放送!包括但不限于CC、单片机、Linux等。私信回复1024,即可免费获取!

一书千语,比能力重要著名教育家本杰明提出了一分钟效应,一分钟的时间可以做许多事情,也可以改变许多事情。他曾经接到一个青年人的求教电话,并与那个渴望指点的青年人约好了见面时间、地点。青年……雷军,小米创始人,企业届的劳模和楷模根据《2021福布斯全球富豪榜》显示,雷军以1490亿元人民币的身价排在第75位。纵观其前半生,可谓充满传奇色彩。1969年雷军出生于湖北仙桃一个教师家庭,父亲只是一名基……腾讯封停大批区块链媒体公众号?原来早有先兆01hr昨晚无聊刷朋友圈,突然看到这么一条消息小编当时还有点不信,打广告不要节操的,你以为你是我吗?直到我看到啥情况啊这是?颤抖着双手进入自家公众号(矿视界),发现……罗技HERO12K战力测试,G304哪个DPI最准不记得什么时候,但一定是从G304开始,无线游戏鼠标的稳定性、续航不再成为我们的困扰,由LIGHTSPEED无线技术和HERO12K引擎打造了G304超神的存在,而且价格也向消……百元电竞鼠标体验,NVIDIA低延时加持,微星2021新品这个春节几乎宅在家里,除了写写稿子拍下视频,貌似十多天来大部分时间都奉献给《英雄联盟》,没办法啊,对抗无聊的方法之一就是打游戏。重新执起长久没接触的游戏,才发觉手中的无线鼠标平……一月致两死,蔚来自动驾驶章健勇NOP不是自动驾驶,随时会退出一则讣告再次将蔚来汽车推上了舆论的风口浪尖。这封讣告表示:2021年8月12日下午两点,美一好品牌管理公司、意统天下餐饮管理公司、上善若水投资管理公司的创始人林文钦在驾驶蔚来E……解析在运输途中货主要求退运或改港,双方权益如何保证在海上货物运输合同纠纷中,货主在货物运输途中享有要求船公司进行退运或者改港的权利;但是如果变更海上货物运输合同难以实现,或者将严重影响船公司正常营运,船公司也可以拒绝托运……不去颠覆,就被颠覆!海尔洗衣机的自我颠覆洗衣机是日常生活中必不可少的家电。在行业市场竞争日趋激烈的今天,新生力量层出不穷,谁能在市场中立于不败之地?进入物联网时代,谁能率先打破行业内卷化,引领洗护行业新变革?海……GalaxyS20粉丝版即将发布或将支持25W快速充电三星正准备发布GalaxyS20粉丝版(FE),在获得蓝牙SIG和中国3C等监管机构的批准后,三星现在通过在巴西和德国开设专页,将这款设备推出来了。更具体地说,GalaxyS2……新人做进口贸易学会这些,保证你不走弯路随着社会和科技的发展,越来越多人做起了进出口贸易,今天我们着重来说说新手做进口贸易怎么做,要注意些什么。产品知识:要成交,基础就是你要对产品有个全面的了解,包括产品的组成……7月29日全息技术板块涨幅达2,微美全息领涨9。57月29日,截至收盘,美股三大指数收盘涨跌不一,道琼斯指数跌127。59点,跌幅0。36,报34930。93点;标普500指数跌0。82点,跌幅0。02,报4400。64点;纳……vivoZ5为iQOONeo专业补洞,让小米荣耀的路怎么走?7月以来,千元机大战可谓是进入了白热化阶段,先是小米CC9和iQOONeo对打激烈,后又有荣耀9X积极参战。确实在15002000元这个档来说,目前国内市场的需求是比较旺……
网上最毒舌卖家会起球,破洞,不爽别买,年销千万成网红店都便宜成这样了,还要啥自行车!文郑亚文编辑范婷婷还以为卖家在开玩笑呢,买来试试,好家伙,还真的起球。袜子一天就起球了,再也不买了!我穿俩月还没起球……学前班第5课外汇交易的不同途径正如我们前面所说,外汇是一个宽泛的概念,能衍生出很多本质上不同的产品工具。因此,在这种环境背景之下,行业人士或投资者都需要基于对现有行业知识认知的基础上,进一步学习和了解外汇周……比特币和以太坊也能免费领取了!让我一步步教你78000元一枚的比特币,2600元枚的以太坊,现在也能不花钱领取?对的没骗你,以下方法亲测有效。首先科普一下为什么可以领取在比特币出现的早期,大家都不了解它是什么……中联设备租赁系统AxureRP原型编号:0183中联设备租赁系统AxureRP原型版权说明:本站所有资料主要来源于网络的公开信息,都保留了原来的版权信息,本站所有的资料文档仅限用于学习交流,如若有侵权的嫌……人生第1次买车,教你5招验车技巧,都是干货,让卖车的无计可施每天三分钟,用车更轻松!大家好,我是你们的好朋友木沐阳。购买人生第一辆车,对于新手来说是比较容易吃闷亏,从选车到最后提车,步步都有预先埋好的坑,一不留神就容易掉进去。不过……拿了红点奖的数据线,自带一体式收纳仓,一拖三设计,超方便不同牌子的手机需要不同接口的充电线,再加上除了手机要充电,充电宝也需要,可各种线材多起来使用麻烦,外出携带更是不方便外露的数据线接口,也经常因一些乱七八糟的原因变形,甚至……如果能靠区块链游戏赚钱,那是否可以当工作?电子游戏不单只是游戏,不管是网络游戏、主机游戏还是现在的区块链游戏。不一样的时期对不一样的人来讲,游戏包括了流程和挑战,对如今的游戏玩家而言,游戏也是一种生活习惯。当专业游戏玩……卢伟冰开始新机预热,红米K40S或被Note11系列取代最近卢伟冰开始了预热前预热,新手机用起来很爽已经明示了要有新机发布,根据之前王腾透露,K40S由于缺少芯片难产了,由此很多网友猜测新机是RedmiK40S至尊纪念版,也就是小米……张近东谈苏宁新十年发展夯实四大能力,服务四个领域作为民营企业的代表,大企业要有大企业的担当,苏宁要始终做国家政策号召的响应者、践行者,所有的发展都要服务社会需要、服务国家政策。12月26日,苏宁举办30周年公益庆生仪式……1msNanoIPS面板引发高端电竞显示器洗牌?优派XG27作为电竞显示器四大金刚中的其中一员,优派XG2703GS已经上市三年多,而随着LGNanoIPS面板的正式推出,优派旗下这款大金刚显示器也迎来了升级。优派全新一代的大金刚……比亚迪新能源汽车的领导者比亚迪全新DMi平台打造,其中骁云插混专用1。5L高效发动机将会率先搭载在两辆车型上。比亚迪秦PLUS是比亚迪最新的越级紧凑型轿车产品,将于接下来的广州车展首发。从最新的……小米首款浴霸手机现身,素颜照很清淡,赶紧围观浴霸,因为华为的原因,从一款卫浴产品嫁接到了手机圈。浴霸后摄在如今动辄后置三摄、四摄的手机圈,不失为一种值得借鉴的设计方案。什么?小米手机一直还没有浴霸后摄的手机?别着急……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网