Valgrind是一个开源的应用程序,提供软件开发人员提供的内存和线程错误管理自动发现在他们的项目中最好的和最常用的工具之一。
换句话说,它可以被用来大大加快你的程序。它&rsquo的; sa命令行应用程序仅在Linux控制台或运行一个X11终端emulator.State的最先进的功能和functionalityKey功能包括内存错误检测器,堆剖析,分支预测和缓存分析器,线程错误探测器,以及调用图生成的分支预测和缓存剖析。
此外,它还带有一些实验工具,如全球和堆栈溢出阵列探测器,SimPoint基本块矢量发生器,和第二堆分析器。
该应用支持范围广泛的用不同的编程语言,如C,C ++,Python和Perl中,爪哇,Fortran语言,汇编代码,和许多其他项目。
它&rsquo的; S由内存调试,分析和检测内存泄漏的几个有用的工具。这些措施包括Memcheck,Addrcheck,Cachegrind,Callgrind,无,地块,EXP-sgcheck,EXP-BBV,EXP-dhat,Helgrind和DRD。
它运行良好的GNU / Linux的,安卓和Mac OS X操作系统。支持的架构,包括X86,AMD64,ARM,PPC32,PPC64,s390x,MIPS32,MIPS64和ARM.Availability并根据hoodThe程序可以从专门章节下载(见上文)仅作为源存档,可以是配置,编译和安装在任何基于Linux的操作系统。
但是,用户可以直接从他们的Linux发行版的默认软件仓库安装Valgrind的。支持的操作系统包括Debian的,红帽的Mandriva,openSUSE的,Arch Linux的,Slackware的,Gentoo的,而others.Bottom LINEIN结论,Valgrind是一个独特的应用程序,应该使用任何软件开发商加快项目和消除讨厌的内存错误和泄漏。
它大局;一个屡获殊荣的软件,已成功用于研究目的在麻省理工学院,剑桥,加州大学伯克利分校,卡内基梅隆大学,加州大学圣巴巴拉分校,康奈尔大学,和世界各地的许多其他大学
<强。 >什么在此版本中是新的:
- 在3.10.1是一个bug修复版本。它修复了报道3.10.0和反向移植修复所有报告的各种错误缺少主干AArch64 ARMv8指令和系统调用。如果您打包或交付3.10.0供他人使用,你可能要考虑升级到3.10.1代替。
什么是3.10.0版本,新的:
- 在3.10.0是一个功能版本有许多改进和错误修正通常的集合。
- 在此版本支持X86 / Linux的,AMD64 / Linux上,ARM32 / Linux上,ARM64 / Linux的,PPC32 / Linux的,PPC64BE / Linux的,PPC64LE / Linux的,S390X / Linux的,MIPS32 / Linux的,MIPS64 / Linux上,ARM / Android的, MIPS32 / Android的X86 / Android的X86 / MacOSX的10.9和AMD64 / MacOSX的10.9。支持MacOSX的10.8和10.9的显著提高相对于3.9.0版本。
什么是3.9.0版本,新的:
- 在此版本支持X86 / Linux的,AMD64 / Linux的,ARM / Linux的,PPC32 / Linux的,PPC64 / Linux的,S390X / Linux的,MIPS32 / Linux的,MIPS64 / Linux上,ARM / Android的X86 / Android的X86 / MacOSX的10.7和AMD64 / MacOSX的10.7。支持Mac OS X 10.8的显著提高相对于3.8.0版本。
- 在平台的更改:
- 在支持MIPS64 LE和BE运行Linux。 Valgrind的已经过测试的MIPS64 Debian的挤压和Debian喘息分布。
- 在MIPS32平台MIPS DSP ASE支持。
- 对于s390x十进制浮点指令的支持上安装了DFP设备的主机。
- 在支持POWER8(电源ISA 2.07),说明
- 在支持Intel AVX2指令。这是仅适用于64位代码。
- 在英特尔事务性同步扩展,无论是RTM和初步支持HLE。
- 有关电源硬件事务内存的初步支持。
- 在对MacOSX的10.8提高支持(仅限64位)。 Memcheck现在可以运行大型GUI应用得相当好。
- 换刀:
- 在Memcheck:
- 在改进中处理矢量化的代码,从而导致显著减少虚假的错误报告。您需要使用标志--partial-负载返回= yes来获取这些变化所带来的好处。
- 在更好地控制泄漏检查。现在可以指定哪些泄漏种(定/间接/坏/可达)应该被显示,这应该由一个给定的泄漏抑制被视为错误,并且其应当被抑制。这是使用的选项 - 显示,泄漏种= kind1,kind2,...,--errors换泄漏种= kind1,kind2,..和一个可选的&QUOT;比赛泄漏种:&QUOT; ,线压制项分别。需要注意的是产生泄漏镇压包含这个新的生产线,因此比以前的版本更加具体。要获得相同的行为以前的版本中,删除和QUOT;比赛泄漏种:&QUOT;使用前从产生镇压行。
- 在减少和QUOT;可能泄漏&QUOT;从泄漏检查通过使用更好的启发式报告。可用试探法提供检测有效内部指针到std :: stdstring的,以新[]分配数组具有析的元素和至内部指针指向一个C使用多重继承++对象的内部的一部分。它们可以单独使用该选项可以选择--leak检查启发式= heur1,heur2,...
- 在堆分配块更好地控制堆栈跟踪收购。使用--keep-踪迹选项,能够独立地控制是否获取栈跟踪对于每个分配和释放。这可以用来创造更好的&QUOT;免费&QUOT后使用;错误或记录较少的信息,以减少Valgrind的的资源消耗。
- 在泄漏抑制用法的好报告。用镇压的列表(-v选项时给出如图)现在显示,每个泄漏镇压,有多少块和字节的最后一个泄漏的搜索过程中也抑制。
- 在Helgrind:
- 在虚假的错误已被删除。
- 从使用的超时pthread_cond_waits而导致的虚假错误,已被删除。
- 在其他更改:
- 在一些试图调整Valgrind的的空间要求,目标的预期功能:
- 在翻译高速缓存的缺省大小已经由8部门6在Android平台上,因为每个部门使用Memcheck时,占地约40MB。
- 在翻译高速缓存的缺省大小已增加至所有其他平台16个扇区,这反映了大型的应用程序需要的仪器和储存的大量代码的事实。出于同样的原因,可被跟踪的存储器映射的段的数量已增加的6倍。
- 在所有的情况下,扇区中的翻译高速缓存的最大数目可通过新的标志--num-transtab部门来控制。
- 在变化中如何调试信息(行号等)被读取:
- 在Valgrind的不再是暂时mmaps整个对象从中读取。相反,读出通过一个小的固定大小的缓冲区完成的。这就避免了虚拟内存的使用高峰时,Valgrind的,从大的共享对象读取debuginfo软。
- 在一个新的实验性远程调试信息服务器。 Valgrind的可以读取从那里debuginfo软物的存放不同的机器上(通常是构建主机)调试信息。在资源有限的目标(手机,平板电脑)运行Valgrind的时候,当全debuginfo软对象存储在别处这样可以节省大量的时间和麻烦。这是由--debuginfo服务器=选项启用。
- 在主一致性和调试对象之间的检查可以使用--allow不匹配-debuginfo软件选项被禁用。
- 在栈展开了栈扫描,对ARM。由放卷叠扫描可以恢复堆栈跟踪在某些情况下,当正常的开卷机制失败。栈扫描是最好的形容为&QUOT;一个讨厌的,危险的和误导性的黑客&QUOT;所以默认情况下禁用。使用--unw栈 - 扫描 - 脱粒和--unw栈扫描帧启用和控制它。
- 在检测和递归堆栈帧周期合并。当你的程序有递归算法,这限制了记录的堆栈跟踪使用Valgrind的内存,并避免记录无趣重复调用。这是通过命令行选项--merge递归帧和监控命令与控制QUOT; v.set合并递归帧&QUOT;
- 在文件名以及用于镇压行号。用于镇压(-v选项时给出所示)现在显示,对于每一个使用压制,文件名和行号的抑制定义。名单
- 在新的和修改的GDB服务器监控功能:
- valgrind.h有一个新的客户端请求,VALGRIND_MONITOR_COMMAND,可用于从客户端程序执行gdbserver的监视命令。
- 在新显示器的命令,&QUOT; v.info open_fds&QUOT ;,,让打开的文件描述符和其他详细信息列表
- 在可选消息&QUOT; v.info n_errs_found&QUOT;监视命令,例如&QUOT; v.info n_errs_found测试1234完成&QUOT ;,允许注释字符串被添加到过程输出,也许用于分离不同的测试或试验阶段的错误的目的
- 在一个新的监视命令&QUOT; v.info execontext&QUOT;显示有关记录Valgrind的堆栈跟踪信息。
- 在一个新的监视命令&QUOT; v.do expensive_sanity_check_general&QUOT;运行一些内部的一致性检查。
- 新标志--sigill诊断控制是否当JIT遇到的指令无法翻译打印诊断消息。实际行为 - 交付SIGILL的应用 - 是不变的
- 的内存Valgrind的可以在64位的目标使用的最高金额已增加从32GB到64GB。这应该使人们有可能运行Memcheck应用本身需要高达大约35GB。
- 修正错误:
- 在下面的错误已得到修复或解决。需要注意的是&QUOT; N-I-BZ&QUOT;
- 表示&QUOT;不要在Bugzilla的&QUOT; - 即,据报道,我们的一个错误
- 在,但从来没有得到一个Bugzilla条目。我们鼓励您在提交错误
- 在Bugzilla的(https://bugs.kde.org/enter_bug.cgi?product=valgrind),而
- 在比邮寄开发商(或邮件列表)直接 - 臭虫
- 在不进入的Bugzilla往往会得到遗忘或忽略。
- 要看到一个给定的错误的详细信息,请访问https://bugs.kde.org/show_bug.cgi?id=XXXXXX其中XXXXXX是下面列出的错误号码。
- 在123837系统调用:第四个参数是可选的,这取决于CMD
- 135425 memcheck应该告诉你在哪里释放的块是Mallocd
- 164485 VG_N_SEGNAMES和VG_N_SEGMENTS(仍然)太小
- 207815添加一些DRM的ioctl来syswrap-linux.c
- 251569 VEX amd64-&GT; IR:0xF的为0x1 0xF9为0xBF 0x90处0xD0 0x3中为0x0(RDTSCP)
- 252955不可能编译的ccache
- 253519 Memcheck报告auxv指针访问无效读取。
- 263034崩溃加载一些PPC64二进制文件时
- 269599增加最深回溯
- 274695 s390x:支持和QUOT;从逻辑&QUOT比较/;指令(z196的)
- 275800 s390x:自动检测缓存信息(部分2)
- 280271 Valgrind的报告可能的内存泄漏仍然可达的std :: string的
- 284540 Memcheck不应指望镇压匹配仍然可达[..]
- 289578回溯与ARM展开表(堆栈扫描标志)
- 296311错误的堆栈跟踪由于-fomit帧指针(86)
- 304832 PPC32:构建失败
- 305431使用find_buildid SHDR后备单独的.debug文件
- 在305728添加支持
- 305948 PPC64:代码生成ShlD64 / ShrD64断言
- 306035 s390x:修复IR新一代的LAAG和朋友
- 306054 s390x:条件码计算的转换至INT /逻辑
- 306098 s390x:转换为另一种形式的操作码/从固定
- 306587修复缓存行检测,从辅助矢量PPC。
- 在306783的Mips未处理的系统调用:4025 /四千一百八十二分之四千零七十九
- 307038 DWARF2 CFI读者:未处理DW_OP_操作码地址0x8(DW_OP_const1u等)
- 307082 HG误报:pthread_cond_destroy:毁灭未知的CV
- 307101 sys_capget第二个参数可以是NULL
- 307103 sys_openat:如果是绝对路径,那么dirfd被忽略
- 307106 amd64-&GT; IR:F0 0F C0 02(锁定XADD字节)
- 307113 s390x:DFP支持
- 在307141的valgrind在MIPS-linux系统简化版,工作
- 307155 filter_gdb应该过滤掉的系统调用,template.S T_PSEUDO
- 在对AVX 307285 x86_amd64功能测试在测试套件是错
- 307290 memcheck重叠测试用例需要memcpy的版本过滤
- 307463请添加&QUOT;&极限= 0&QUOT;到&QUOT;所有打开的bug和QUOT;链接
- 307465 --show-可能丢=不应该减少错误计数/退出代码
- 307557泄漏在Mac OS X :: recursiveInit [..]
- 307729 pkgconfig支持破valgrind.pc
- 307828 Memcheck虚假错误SSE优化wcscpy,wcscmp,wcsrchr,wcschr
- 307955大厦的valgrind 3.7.0-R4中的Gentoo AMD64使用铛当失败
- 308089未处理的PPC64系统调用:使用prctl
- 308135 PPC32 MPC8xx有16个字节的缓存大小
- 308321测试套件memcheck过滤干扰gdb_filter
- 308333 == 307106
- 308341 vgdb应报告进程退出(或致命的信号)
- 308427 S390 memcheck报告TSEARCH C跳转/ cmove取决于UNINIT
- 308495删除生成依赖
- 在308573内部错误
- 308626 == 308627
- 308627 PMOVMSKB有效性位传播是不精确
- 308644 vgdb命令
- 308711提供有关aspacemgr和out_of_memory 竞技场更多信息
- 308717 ARM:实行定点VCVT.F64 [苏] 32 。
- 308718 ARM实现SMLALBB系列指令
- 在308886缺少支持
- 在308930系统调用name_to_handle_at(303 AMD64)没有处理好
- 在309229 V-位测试仪不报告数
- 309323打印无法识别instuction
- 309425提供一个--sigill诊断标志打压非法[..]
- 309427 SSE优化stpncpy触发未初始化值[..]错误
- 309430自托管PPC64遇到操作数类型vassert误差
- 309600 Valgrind是有点困惑0大小的段
- 309823生成仍可达块 错误
- 309921 PCMPISTRI有效性位传播是不精确
- 309922无/测试/ PPC64 / test_dfp5有时会失败
- 310169是不支持VBIT检查的Iop_CmpORD类的IOPS。
- 310424 --read-VAR-信息不正确描述静态变量
- 在310792的搜索其他路径
- 310931 s390x:消息安全辅助(MSA)指令扩展[..]
- 311100 PPC DFP执行的整数操作数的不一致[..]
- 311318 ARM:&QUOT; 128位常数未实现&QUOT;错误信息
- 311407 SSSE3 BCOPY(实际上转换的memcpy)导致无效读[..]
- 311690 V崩溃,因为它重定向重定向功能,内部分支机构
- 311880 x86_64的:使regtest挂在shell_valid1
- 311922警告:未处理的系统调用:170
- 311933 == 251569
- 312171 PPC:insn中选择的DFP
- 312571舍入模式调用错的DFP IOPS [..]
- 312620更改为Iop_D32toD64 [..]为S390 DFP支持打破PPC [..]
- 312913悬摆指针错误也应报告ALLOC堆栈跟踪
- 312980大厦山狮产生一些编译器警告
- 313267添加MIPS64 / Linux移植到Valgrind的
- 313348 == 251569
- 313354 == 251569
- 313811缓冲区溢出
- 314099 Coverity公司在VEX guest_ppc_toIR.c insn_suffix 指出错误
- 314269 PPC:在insn中选择死代码
- 314718 ARM:实现整数除法指令(SDIV和UDIV)
- 315345 CL-format.xml和callgrind / dump.c不同意使用CFL =或CFI =
- 315441 SENDMSG系统调用应该忽略未设置msghdr msg_flags
- 315534 msgrcv一个线程内导致Valgrind的挂起(块)
- 315545断言“(UCHAR *)节&GT; TT [tteNo] .tcptr的soname”
- 320895添加fanotify支持(包括补丁)
- 320998 VEX amd64-&GT; IR pcmpestri和pcmpestrm SSE4.2指令
- 321065 Valgrind的更新的Xen 4.3
- 321148未处理的指令:PLI(拇指1,2,3)
- 321363未处理的指令:SSAX(ARM +拇指)
- 321364未处理的指令:SXTAB16(ARM +拇指)
- 321466未处理的指令:SHASX(ARM +拇指)
- 321467未处理的指令:SHSAX(ARM +拇指)
- 321468未处理的指令:SHSUB16(ARM +拇指)
- 321619未处理的指令:SHSUB8(ARM +拇指)
- 321620未处理的指令:UASX(ARM +拇指)
- 321621未处理的指令:USAX(ARM +拇指)
- 321692未处理的指令:UQADD16(ARM +拇指)
- 321693未处理的指令:LDRSBT(拇指)
- 321694未处理的指令:UQASX(ARM +拇指)
- 321696未处理的指令:UQSAX(拇指+ ARM)
- 321697未处理的指令:UHASX(ARM +拇指)
- 321703未处理的指令:UHSAX(ARM +拇指)
- 321704未处理的指令:REVSH(ARM +拇指)
- 在321730添加cg_diff和cg_merge手册页
- 在321738添加vgdb和Valgrind的监听手册页
- 321814 == 315545
- 321891未处理的指令:LDRHT(拇指)
- 在321960的pthread_create(),然后的alloca()导致无效堆栈写入错误
- 321969 PPC32和PPC64不支持[LF] setxattr
- 322254显示threadname连同TID如果通过应用程序设置
- 在322294添加初步支持IBM的Power ISA 2.07
- 322368断言失败下OS X 10.8
- 322563 VEX MIPS-&GT; IR:0x70 0x83开0XF0 0x3A的
- 322807 VALGRIND_PRINTF_BACKTRACE写调用堆栈,以XML和文本到stderr
- 322851 0bXXX二进制文字语法不规范
- 323035未处理的指令:LDRSHT(拇指)
- 323036未处理的指令:SMMLS(ARM和Thumb)
- 在323116的memcheck /测试/ PPC64 / power_ISA2_05.c构建失败,[..]
- 323175未处理的指令:SMLALD(ARM +拇指)
- 323177未处理的指令:SMLSLD(ARM +拇指)
- 在323432调用pthread_cond_destroy()或pthread_mutex_destroy()[..]
- 323437期2支持
- 323713支持mmxext(整数SSE)的子集
- 323803事务内存的说明
- 323893 SSE3上AMD的CPU不具备的valgrind
- 323905从Valgrind的可能的误报/ DRD上的close()
- 323912 valgrind.h头是不是mingw64兼容
- 324047 Valgrind的不支持[LDR,ST] {S} [B,H] T,ARM指令
- 324149 helgrind:当那么pthread_cond_timedwait返回ETIMEDOUT [..]
- 324181 MMAP不处理MAP_32BIT
- 324227 memcheck当一个线程调用exit +块假阳性泄漏[..]
- 324421支持ARM架构fanotify API
- 324514 gdbserver的监视CMD输出行为的一致性[..]
- 324518 PPC64:中dcbt指令仿真不处理[..]
- 324546无/测试/ PPC32 test_isa_2_07_part2请求-m64
- 324582当访问时,以释放内存,同时报告分配[..]
- 324594修复溢出计算的电力ISA 2.06的insn:mulldo / mulldo
- 324765 PPC64:非法指令执行时没有/测试/ PPC64 / JM-杂项
- 324816不正确的VEX实现xscvspdp / xvcvspdp为SNaN时输入
- 324834未处理说明的x86_64
- 324894期3支持
- 326091 DRD:避免优化的strlen假赛报告()impls
- 在326113的valgrind libvex hwcaps在AMD64误差
- NI-BZ一些错误的命令行选项可以忽略
- NI-BZ补丁,允许公平sched的在Android
- NI-BZ报告错误vgdb快照执行前要求
- NI-BZ相同303624(固定3.8.0),但是对于Android的86
从使用的静态初始化互斥和条件变量(PTHREAD_MUTEX_INITIALISER等)产生的
对AVX2指令
10.7.5库在ImageLoader的
安装Xen的头在
在32位模式下执行64位指令
具有用于轨道-FDS选项信息
对于PTRACE_SET / GETREGSET
生成的测试
在MIPS
调试符号
在assert_fail
在wqthread_hijack
针对IBM的Power ISA 2.07
在i386(速龙)
不支持功耗
在Microsoft C运行时间
针对IBM的Power ISA 2.07
什么是3.8.1版本,新的:
- 在它修复了一些断言失败的3.8.0的发生中度经常在实际使用的情况下,增加了对ARM的一些缺失的说明,并修正MacOSX的死锁情况。
- 如果您打包或交付3.8.0供他人使用,你可能要考虑升级到3.8.1吧。
什么是3.6.0版本,新的:
- 在这是一个功能版本有许多显著的改善和平时收集的缺陷修复。
- 在主要的改进是,Valgrind的,现在工作在ARM / Linux和在Mac OS X 10.6(雪豹)。
评论没有发现