Valgrind

Software Screenshot:
Valgrind
Software Details:
Version: 3.10.1
Upload Date: 17 Feb 15
Distribution Type: Freeware
Downloads: 58

Rating: 4.0/5 (Total Votes: 2)

Valgrind is an open source application that provides software developers with one of the best and most used tools for automatic discovery of memory threading and management bugs on their projects.

In other words, it can be used to greatly speed up your programs. It’s a command-line application the runs only on the Linux console or an X11 terminal emulator.

State-of-the-art features and functionality

Key features include memory error detector, heap profiler, branch-prediction and cache profiler, thread error detectors, as well as call-graph generating branch-prediction and cache profiler.

In addition, it comes with several experimental tools, such as global and stack array overrun detector, SimPoint basic block vector generator, and second heap profiler.

The application supports a wide range of programs written in different programming languages, such as C, C++, Python, Perl, Java, Fortran, assembly code, and many others.

It’s comprised of several useful utilities for memory debugging, profiling and detection of memory leaks. These include Memcheck, Addrcheck, Cachegrind, Callgrind, None, Massif, exp-sgcheck, exp-bbv, exp-dhat, Helgrind, and DRD.

It runs well on the GNU/Linux, Android, Mac OS X operating systems. Supported architectures include x86, amd64, ARM, PPC32, PPC64, s390x, MIPS32, MIPS64, and ARM.

Availability and under the hood

The program can be downloaded from the dedicated section (see above) only as a source archive, which can be configure, compiled and installed on any Linux-based operating system.

However, users can install Valgrind directly from the default software repositories of their Linux distributions. Supported OSes include Debian, Red Hat, Mandriva, openSUSE, Arch Linux, Slackware, Gentoo, and others.

Bottom line

In conclusion, Valgrind is a unique application that should be used by any software developer to speed up their programs and eliminating nasty memory bugs and leaks.

It’s an award winning software that has been successfully used for research purposes at the MIT, Cambridge, UC Berkeley, Carnegie Mellon, UC Santa Barbara, Cornell, and many other universities around the world.

What is new in this release:

  • 3.10.1 is a bug fix release. It fixes various bugs reported in 3.10.0 and backports fixes for all reported missing AArch64 ARMv8 instructions and syscalls from the trunk. If you package or deliver 3.10.0 for others to use, you might want to consider upgrading to 3.10.1 instead.

What is new in version 3.10.0:

  • 3.10.0 is a feature release with many improvements and the usual collection of bug fixes.
  • This release supports 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 and AMD64/MacOSX 10.9. Support for MacOSX 10.8 and 10.9 is significantly improved relative to the 3.9.0 release.

What is new in version 3.9.0:

  • This release supports X86/Linux, AMD64/Linux, ARM/Linux, PPC32/Linux, PPC64/Linux, S390X/Linux, MIPS32/Linux, MIPS64/Linux, ARM/Android, X86/Android, X86/MacOSX 10.7 and AMD64/MacOSX 10.7. Support for Mac OS X 10.8 is significantly improved relative to the 3.8.0 release.
  • PLATFORM CHANGES:
  • Support for MIPS64 LE and BE running Linux. Valgrind has been tested on MIPS64 Debian Squeeze and Debian Wheezy distributions.
  • Support for MIPS DSP ASE on MIPS32 platforms.
  • Support for s390x Decimal Floating Point instructions on hosts that have the DFP facility installed.
  • Support for POWER8 (Power ISA 2.07) instructions
  • Support for Intel AVX2 instructions. This is available only on 64 bit code.
  • Initial support for Intel Transactional Synchronization Extensions, both RTM and HLE.
  • Initial support for Hardware Transactional Memory on POWER.
  • Improved support for MacOSX 10.8 (64-bit only). Memcheck can now run large GUI apps tolerably well.
  • TOOL CHANGES:
  • Memcheck:
  • Improvements in handling of vectorised code, leading to significantly fewer false error reports. You need to use the flag --partial-loads-ok=yes to get the benefits of these changes.
  • Better control over the leak checker. It is now possible to specify which leak kinds (definite/indirect/possible/reachable) should be displayed, which should be regarded as errors, and which should be suppressed by a given leak suppression. This is done using the options --show-leak-kinds=kind1,kind2,.., --errors-for-leak-kinds=kind1,kind2,.. and an optional "match-leak-kinds:" line in suppression entries, respectively. Note that generated leak suppressions contain this new line and are therefore more specific than in previous releases. To get the same behaviour as previous releases, remove the "match-leak-kinds:" line from generated suppressions before using them.
  • Reduced "possible leak" reports from the leak checker by the use of better heuristics. The available heuristics provide detection of valid interior pointers to std::stdstring, to new[] allocated arrays with elements having destructors and to interior pointers pointing to an inner part of a C++ object using multiple inheritance. They can be selected individually using the option --leak-check-heuristics=heur1,heur2,...
  • Better control of stacktrace acquisition for heap-allocated blocks. Using the --keep-stacktraces option, it is possible to control independently whether a stack trace is acquired for each allocation and deallocation. This can be used to create better "use after free" errors or to decrease Valgrind's resource consumption by recording less information.
  • Better reporting of leak suppression usage. The list of used suppressions (shown when the -v option is given) now shows, for each leak suppressions, how many blocks and bytes it suppressed during the last leak search.
  • Helgrind:
  • False errors resulting from the use of statically initialised mutexes and condition variables (PTHREAD_MUTEX_INITIALISER, etc) have been removed.
  • False errors resulting from the use of pthread_cond_waits that timeout, have been removed.
  • OTHER CHANGES:
  • Some attempt to tune Valgrind's space requirements to the expected capabilities of the target:
  • The default size of the translation cache has been reduced from 8 sectors to 6 on Android platforms, since each sector occupies about 40MB when using Memcheck.
  • The default size of the translation cache has been increased to 16 sectors on all other platforms, reflecting the fact that large applications require instrumentation and storage of huge amounts of code. For similar reasons, the number of memory mapped segments that can be tracked has been increased by a factor of 6.
  • In all cases, the maximum number of sectors in the translation cache can be controlled by the new flag --num-transtab-sectors.
  • Changes in how debug info (line numbers, etc) is read:
  • Valgrind no longer temporarily mmaps the entire object to read from it. Instead, reading is done through a small fixed sized buffer. This avoids virtual memory usage spikes when Valgrind reads debuginfo from large shared objects.
  • A new experimental remote debug info server. Valgrind can read debug info from a different machine (typically, a build host) where debuginfo objects are stored. This can save a lot of time and hassle when running Valgrind on resource-constrained targets (phones, tablets) when the full debuginfo objects are stored somewhere else. This is enabled by the --debuginfo-server= option.
  • Consistency checking between main and debug objects can be disabled using the --allow-mismatched-debuginfo option.
  • Stack unwinding by stack scanning, on ARM. Unwinding by stack scanning can recover stack traces in some cases when the normal unwind mechanisms fail. Stack scanning is best described as "a nasty, dangerous and misleading hack" and so is disabled by default. Use --unw-stack-scan-thresh and --unw-stack-scan-frames to enable and control it.
  • Detection and merging of recursive stack frame cycles. When your program has recursive algorithms, this limits the memory used by Valgrind for recorded stack traces and avoids recording uninteresting repeated calls. This is controlled by the command line option --merge-recursive-frame and by the monitor command "v.set merge-recursive-frames".
  • File name and line numbers for used suppressions. The list of used suppressions (shown when the -v option is given) now shows, for each used suppression, the file name and line number where the suppression is defined.
  • New and modified GDB server monitor features:
  • valgrind.h has a new client request, VALGRIND_MONITOR_COMMAND, that can be used to execute gdbserver monitor commands from the client program.
  • A new monitor command, "v.info open_fds", that gives the list of open file descriptors and additional details.
  • An optional message in the "v.info n_errs_found" monitor command, for example "v.info n_errs_found test 1234 finished", allowing a comment string to be added to the process output, perhaps for the purpose of separating errors of different tests or test phases.
  • A new monitor command "v.info execontext" that shows information about the stack traces recorded by Valgrind.
  • A new monitor command "v.do expensive_sanity_check_general" to run some internal consistency checks.
  • New flag --sigill-diagnostics to control whether a diagnostic message is printed when the JIT encounters an instruction it can't translate. The actual behavior -- delivery of SIGILL to the application -- is unchanged.
  • The maximum amount of memory that Valgrind can use on 64 bit targets has been increased from 32GB to 64GB. This should make it possible to run applications on Memcheck that natively require up to about 35GB.
  • FIXED BUGS:
  • The following bugs have been fixed or resolved. Note that "n-i-bz"
  • stands for "not in bugzilla" -- that is, a bug that was reported to us
  • but never got a bugzilla entry. We encourage you to file bugs in
  • bugzilla (https://bugs.kde.org/enter_bug.cgi?product=valgrind) rather
  • than mailing the developers (or mailing lists) directly -- bugs that
  • are not entered into bugzilla tend to get forgotten about or ignored.
  • To see details of a given bug, visit https://bugs.kde.org/show_bug.cgi?id=XXXXXX where XXXXXX is the bug number as listed below.
  • 123837 system call: 4th argument is optional, depending on cmd
  • 135425 memcheck should tell you where Freed blocks were Mallocd
  • 164485 VG_N_SEGNAMES and VG_N_SEGMENTS are (still) too small
  • 207815 Adds some of the drm ioctls to syswrap-linux.c
  • 251569 vex amd64->IR: 0xF 0x1 0xF9 0xBF 0x90 0xD0 0x3 0x0 (RDTSCP)
  • 252955 Impossible to compile with ccache
  • 253519 Memcheck reports auxv pointer accesses as invalid reads.
  • 263034 Crash when loading some PPC64 binaries
  • 269599 Increase deepest backtrace
  • 274695 s390x: Support "compare to/from logical" instructions (z196)
  • 275800 s390x: Autodetect cache info (part 2)
  • 280271 Valgrind reports possible memory leaks on still-reachable std::string
  • 284540 Memcheck shouldn't count suppressions matching still-reachable [..]
  • 289578 Backtraces with ARM unwind tables (stack scan flags)
  • 296311 Wrong stack traces due to -fomit-frame-pointer (x86)
  • 304832 ppc32: build failure
  • 305431 Use find_buildid shdr fallback for separate .debug files
  • 305728 Add support for AVX2 instructions
  • 305948 ppc64: code generation for ShlD64 / ShrD64 asserts
  • 306035 s390x: Fix IR generation for LAAG and friends
  • 306054 s390x: Condition code computation for convert-to-int/logical
  • 306098 s390x: alternate opcode form for convert to/from fixed
  • 306587 Fix cache line detection from auxiliary vector for PPC.
  • 306783 Mips unhandled syscall : 4025 / 4079 / 4182
  • 307038 DWARF2 CFI reader: unhandled DW_OP_ opcode 0x8 (DW_OP_const1u et al)
  • 307082 HG false positive: pthread_cond_destroy: destruction of unknown CV
  • 307101 sys_capget second argument can be NULL
  • 307103 sys_openat: If pathname is absolute, then dirfd is ignored.
  • 307106 amd64->IR: f0 0f c0 02 (lock xadd byte)
  • 307113 s390x: DFP support
  • 307141 valgrind does't work in mips-linux system
  • 307155 filter_gdb should filter out syscall-template.S T_PSEUDO
  • 307285 x86_amd64 feature test for avx in test suite is wrong
  • 307290 memcheck overlap testcase needs memcpy version filter
  • 307463 Please add "&limit=0" to the "all open bugs" link
  • 307465 --show-possibly-lost=no should reduce the error count / exit code
  • 307557 Leaks on Mac OS X 10.7.5 libraries at ImageLoader::recursiveInit[..]
  • 307729 pkgconfig support broken valgrind.pc
  • 307828 Memcheck false errors SSE optimized wcscpy, wcscmp, wcsrchr, wcschr
  • 307955 Building valgrind 3.7.0-r4 fails in Gentoo AMD64 when using clang
  • 308089 Unhandled syscall on ppc64: prctl
  • 308135 PPC32 MPC8xx has 16 bytes cache size
  • 308321 testsuite memcheck filter interferes with gdb_filter
  • 308333 == 307106
  • 308341 vgdb should report process exit (or fatal signal)
  • 308427 s390 memcheck reports tsearch cjump/cmove depends on uninit
  • 308495 Remove build dependency on installed Xen headers
  • 308573 Internal error on 64-bit instruction executed in 32-bit mode
  • 308626 == 308627
  • 308627 pmovmskb validity bit propagation is imprecise
  • 308644 vgdb command for having the info for the track-fds option
  • 308711 give more info about aspacemgr and arenas in out_of_memory
  • 308717 ARM: implement fixed-point VCVT.F64.[SU]32
  • 308718 ARM implement SMLALBB family of instructions
  • 308886 Missing support for PTRACE_SET/GETREGSET
  • 308930 syscall name_to_handle_at (303 on amd64) not handled
  • 309229 V-bit tester does not report number of tests generated
  • 309323 print unrecognized instuction on MIPS
  • 309425 Provide a --sigill-diagnostics flag to suppress illegal [..]
  • 309427 SSE optimized stpncpy trigger uninitialised value [..] errors
  • 309430 Self hosting ppc64 encounters a vassert error on operand type
  • 309600 valgrind is a bit confused about 0-sized sections
  • 309823 Generate errors for still reachable blocks
  • 309921 PCMPISTRI validity bit propagation is imprecise
  • 309922 none/tests/ppc64/test_dfp5 sometimes fails
  • 310169 The Iop_CmpORD class of Iops is not supported by the vbit checker.
  • 310424 --read-var-info does not properly describe static variables
  • 310792 search additional path for debug symbols
  • 310931 s390x: Message-security assist (MSA) instruction extension [..]
  • 311100 PPC DFP implementation of the integer operands is inconsistent [..]
  • 311318 ARM: "128-bit constant is not implemented" error message
  • 311407 ssse3 bcopy (actually converted memcpy) causes invalid read [..]
  • 311690 V crashes because it redirects branches inside of a redirected function
  • 311880 x86_64: make regtest hangs at shell_valid1
  • 311922 WARNING: unhandled syscall: 170
  • 311933 == 251569
  • 312171 ppc: insn selection for DFP
  • 312571 Rounding mode call wrong for the DFP Iops [..]
  • 312620 Change to Iop_D32toD64 [..] for s390 DFP support broke ppc [..]
  • 312913 Dangling pointers error should also report the alloc stack trace
  • 312980 Building on Mountain Lion generates some compiler warnings
  • 313267 Adding MIPS64/Linux port to Valgrind
  • 313348 == 251569
  • 313354 == 251569
  • 313811 Buffer overflow in assert_fail
  • 314099 coverity pointed out error in VEX guest_ppc_toIR.c insn_suffix
  • 314269 ppc: dead code in insn selection
  • 314718 ARM: implement integer divide instruction (sdiv and udiv)
  • 315345 cl-format.xml and callgrind/dump.c don't agree on using cfl= or cfi=
  • 315441 sendmsg syscall should ignore unset msghdr msg_flags
  • 315534 msgrcv inside a thread causes valgrind to hang (block)
  • 315545 Assertion '(UChar*)sec->tt[tteNo].tcptr soname'
  • 320895 add fanotify support (patch included)
  • 320998 vex amd64->IR pcmpestri and pcmpestrm SSE4.2 instruction
  • 321065 Valgrind updates for Xen 4.3
  • 321148 Unhandled instruction: PLI (Thumb 1, 2, 3)
  • 321363 Unhandled instruction: SSAX (ARM + Thumb)
  • 321364 Unhandled instruction: SXTAB16 (ARM + Thumb)
  • 321466 Unhandled instruction: SHASX (ARM + Thumb)
  • 321467 Unhandled instruction: SHSAX (ARM + Thumb)
  • 321468 Unhandled instruction: SHSUB16 (ARM + Thumb)
  • 321619 Unhandled instruction: SHSUB8 (ARM + Thumb)
  • 321620 Unhandled instruction: UASX (ARM + Thumb)
  • 321621 Unhandled instruction: USAX (ARM + Thumb)
  • 321692 Unhandled instruction: UQADD16 (ARM + Thumb)
  • 321693 Unhandled instruction: LDRSBT (Thumb)
  • 321694 Unhandled instruction: UQASX (ARM + Thumb)
  • 321696 Unhandled instruction: UQSAX (Thumb + ARM)
  • 321697 Unhandled instruction: UHASX (ARM + Thumb)
  • 321703 Unhandled instruction: UHSAX (ARM + Thumb)
  • 321704 Unhandled instruction: REVSH (ARM + Thumb)
  • 321730 Add cg_diff and cg_merge man pages
  • 321738 Add vgdb and valgrind-listener man pages
  • 321814 == 315545
  • 321891 Unhandled instruction: LDRHT (Thumb)
  • 321960 pthread_create() then alloca() causing invalid stack write errors
  • 321969 ppc32 and ppc64 don't support [lf]setxattr
  • 322254 Show threadname together with tid if set by application
  • 322294 Add initial support for IBM Power ISA 2.07
  • 322368 Assertion failure in wqthread_hijack under OS X 10.8
  • 322563 vex mips->IR: 0x70 0x83 0xF0 0x3A
  • 322807 VALGRIND_PRINTF_BACKTRACE writes callstack to xml and text to stderr
  • 322851 0bXXX binary literal syntax is not standard
  • 323035 Unhandled instruction: LDRSHT(Thumb)
  • 323036 Unhandled instruction: SMMLS (ARM and Thumb)
  • 323116 The memcheck/tests/ppc64/power_ISA2_05.c fails to build [..]
  • 323175 Unhandled instruction: SMLALD (ARM + Thumb)
  • 323177 Unhandled instruction: SMLSLD (ARM + Thumb)
  • 323432 Calling pthread_cond_destroy() or pthread_mutex_destroy() [..]
  • 323437 Phase 2 support for IBM Power ISA 2.07
  • 323713 Support mmxext (integer sse) subset on i386 (athlon)
  • 323803 Transactional memory instructions are not supported for Power
  • 323893 SSE3 not available on amd cpus in valgrind
  • 323905 Probable false positive from Valgrind/drd on close()
  • 323912 valgrind.h header isn't compatible for mingw64
  • 324047 Valgrind doesn't support [LDR,ST]{S}[B,H]T ARM instructions
  • 324149 helgrind: When pthread_cond_timedwait returns ETIMEDOUT [..]
  • 324181 mmap does not handle MAP_32BIT
  • 324227 memcheck false positive leak when a thread calls exit+block [..]
  • 324421 Support for fanotify API on ARM architecture
  • 324514 gdbserver monitor cmd output behaviour consistency [..]
  • 324518 ppc64: Emulation of dcbt instructions does not handle [..]
  • 324546 none/tests/ppc32 test_isa_2_07_part2 requests -m64
  • 324582 When access is made to freed memory, report both allocation [..]
  • 324594 Fix overflow computation for Power ISA 2.06 insns: mulldo/mulldo.
  • 324765 ppc64: illegal instruction when executing none/tests/ppc64/jm-misc
  • 324816 Incorrect VEX implementation for xscvspdp/xvcvspdp for SNaN inputs
  • 324834 Unhandled instructions in Microsoft C run-time for x86_64
  • 324894 Phase 3 support for IBM Power ISA 2.07
  • 326091 drd: Avoid false race reports from optimized strlen() impls
  • 326113 valgrind libvex hwcaps error on AMD64
  • n-i-bz Some wrong command line options could be ignored
  • n-i-bz patch to allow fair-sched on android
  • n-i-bz report error for vgdb snapshot requested before execution
  • n-i-bz same as 303624 (fixed in 3.8.0), but for x86 android

What is new in version 3.8.1:

  • It fixes some assertion failures in 3.8.0 that occur moderately frequently in real use cases, adds support for some missing instructions on ARM, and fixes a deadlock condition on MacOSX.
  • If you package or deliver 3.8.0 for others to use, you might want to consider upgrading to 3.8.1 instead.

What is new in version 3.6.0:

  • This is a feature release with many significant improvements and the usual collection of bug fixes.
  • The main improvement is that Valgrind now works on ARM/Linux and on Mac OS X 10.6 (Snow Leopard).

Similar Software

jTracer
jTracer

17 Feb 15

ngrep
ngrep

2 Jun 15

radare
radare

11 May 15

Comments to Valgrind

Comments not found
Add Comment
Turn on images!