Memory debugger

Source: Wikipedia, the free encyclopedia.

A memory debugger is a

dynamic memory. Programs written in languages that have garbage collection, such as managed code
, might also need memory debuggers, e.g. for memory leaks due to "living" references in collections.

Overview

Memory debuggers work by monitoring memory access, allocations, and deallocation of memory. Many memory debuggers require applications to be recompiled with special dynamic memory allocation libraries, whose APIs are mostly compatible with conventional dynamic memory allocation libraries, or else use dynamic linking.

malloc. Some memory debuggers (e.g. Valgrind
) work by running the executable in a virtual machine-like environment, monitoring memory access, allocation and deallocation so that no recompilation with special memory allocation libraries is required.

Finding memory issues such as leaks can be extremely time consuming as they may not manifest themselves except under certain conditions. Using a tool to detect memory misuse makes the process much faster and easier.[1]

As abnormally high memory utilization can be a contributing factor in

runtimes
.

Comparison to static analyzer

Some

static code analysis is performed by analyzing the code without executing it. These different techniques will typically find different instances of problems, and using them both together yields the best result.[2]

List of memory debugging tools

This is a list of tools useful for memory debugging. A profiler can be used in conjunction with a memory debugger.

Name OS License Languages Technique
AddressSanitizer
Linux, Mac OS Free/open source (LLVM) C, C++. Compile-time instrumentation (available in Clang and GCC) and specialized library
Allinea DDT
Linux, Blue Gene Proprietary commercial C, C++ and F90. Also for parallel programs on supercomputers Runtime - through dynamic linking
AQtime Windows (Visual Studio, Embarcadero IDEs) Proprietary commercial .NET, C++, Java, Silverlight, JScript, VBScript[3] Runtime
Bcheck Solaris
BoundsChecker Windows (Visual Studio) Proprietary commercial C++ Runtime intercepts or compile-time
Daikon Unix, Windows, Mac OS X[4] Free/open source[5] Java, C/C++, Perl, and Eiffel[4] Runtime dynamic invariant detection
Debug_new (general technique) (general technique) C++ Compile-time override
Deleaker Windows (standalone, and plugins for Visual Studio, RAD Studio, Qt Creator, CLion) Proprietary commercial C++, .Net, Delphi Runtime intercepts
dmalloc Any Free/open source C Compile-time override
DynamoRIO § Dr. Memory Android, Linux, Windows Free/open source (LGPL and BSD) Any Runtime intercepts
Electric Fence Unix GNU GPL C, C++ Compile-time override
FASTMM4 Windows GNU GPL Delphi Compile-time override
IBM Rational Purify
Unix, Windows Proprietary commercial C++, Java, .NET Runtime
Insure++ Windows (Visual Studio plugin), Unix Proprietary commercial C, C++ source code instrumentation
Intel Inspector Windows (Visual Studio), Linux Proprietary commercial C, C++, Fortran Runtime
libcwd Linux (gcc) Free/open source C, C++ Compile-time override
libumem Solaris Bundled with Solaris Link-time override
Memwatch Any (programming library) Free/open source C Compile-time override
mtrace Various GNU LGPL GNU C library Built-in, outputs accesses
MTuner Various Free C, C++ Runtime intercepts, Link-time override (MSVC, Clang and GCC), Leak detection
Oracle Solaris Studio
(formerly Sun Studio Runtime Checking)
Linux, Solaris Proprietary freeware C, C++, Fortran
OLIVER (APT international) MVS, MVS/EXA, DOS/VSE Proprietary software IBM Assembler Runtime intercepts, Hypervisor - Type 2
TotalView Unix, Mac OS X Proprietary commercial C, C++, Fortran Runtime
Valgrind § Memcheck Linux, Mac OS, Android GNU GPL Any Runtime intercepts
WinDbg Windows Proprietary freeware C, C++, .NET, Python Runtime

See also

References

  • Michael C. Daconta: C++ Pointers and Dynamic Memory Management, John Wiley & Sons,

External links