Content deleted Content added
→Overview: tools make it easier |
|||
(30 intermediate revisions by 22 users not shown) | |||
Line 1:
{{Short description|Software memory problem finder}}
{{
{{Program execution}}
A '''memory debugger'''
==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. [[Electric Fence]] is such a debugger which debugs memory allocation with [[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
As abnormally high memory utilization can be a contributing factor in [[software aging]], memory debuggers can help programmers to avoid [[software anomaly|software anomalies]] that would exhaust the computer system memory, thus ensuring high reliability of the software even for long [[run time (program lifecycle phase)|runtimes]].
==Comparison to static analyzer==
Some [[List of tools for static code analysis|static analysis tools]] can also help find memory errors. Memory debuggers operate as part of an application while its [[Execution (computing)|running]] while [[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.<ref>{{cite web|url=https://software.intel.com/en-us/inspector-user-guide-windows-dynamic-analysis-vs-static-analysis|access-date=August 24, 2017|title=Dynamic Analysis vs. Static Analysis}}</ref>
==List of memory debugging tools==
This is a list of [[Programming tool|tools]] useful for memory debugging. A [[profiling (computer programming)|profiler]] can be used in conjunction with a memory debugger
{|class="wikitable sortable"
Line 24 ⟶ 29:
| Linux, Mac OS
| Free/open source (LLVM)
| C, C++
| Compile-time instrumentation (available in [[Clang]] and [[GNU Compiler Collection|GCC]]) and specialized library
|-
| [[Allinea Distributed Debugging Tool|Allinea DDT]]
| Linux, Blue Gene
| {{Proprietary}} commercial
| C, C++ and F90. Also for parallel programs on supercomputers
| Runtime - through dynamic linking
Line 35 ⟶ 40:
| [[AQtime]]
| Windows (Visual Studio, Embarcadero IDEs)
| {{Proprietary}} commercial
| .NET, C++, Java, Silverlight, JScript, VBScript<ref>{{Cite web |url=http://smartbear.com/products/qa-tools/application-performance-profiling/profiling-managed-code |title=Managed Code - AQtime Pro | SmartBear |access-date=2013-01-14 |archive-url=https://web.archive.org/web/20130919153515/http://smartbear.com/products/qa-tools/application-performance-profiling/profiling-managed-code |archive-date=2013-09-19 |url-status=dead }}</ref>
| Runtime
|-
Line 47 ⟶ 52:
| [[BoundsChecker]]
| Windows (Visual Studio)
| {{Proprietary}} commercial
| C++
| Runtime intercepts or compile-time
|-
| [[Daikon (system)|Daikon]]
| Unix, Windows, Mac OS X<ref name="diakon_manual">{{Cite web|url=http://groups.csail.mit.edu/pag/daikon/download/doc/daikon.html|title=The Daikon Invariant Detector User Manual}}</ref>
| Free/open source<ref>{{Cite web|url=http://groups.csail.mit.edu/pag/daikon/download/doc/daikon.html#License|title = The Daikon Invariant Detector User Manual}}</ref>
| Java, C/C++, Perl, and Eiffel<ref name="diakon_manual" />
| Runtime dynamic invariant detection
Line 62 ⟶ 67:
| 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 ([[ISC License]])
| C
| Compile-time override
|-
| {{section link|DynamoRIO|Dr. Memory}}
| Android, Linux, Windows
| Free/open source (LGPL and BSD)
| {{Any}}
| Runtime intercepts
|-
| [[Electric Fence]]
| Unix
| {{GPL-lic|Free/open source (GPL)}}
| C, C++
| Compile-time override
|-
| [[FASTMM4]]
| Windows
| {{GPL-lic|Free/open source (GPL)}}
| Delphi
| Compile-time override
|-
| [[IBM Rational Purify]]
| Unix, Windows
| {{Proprietary}} commercial
| C++, Java, .NET
| Runtime
Line 83 ⟶ 106:
| [[Insure++]]
| Windows (Visual Studio plugin), Unix
| {{Proprietary}} commercial
| C, C++
| source code instrumentation
|-
| [[Intel
| Windows (Visual Studio), Linux
| {{Proprietary}} commercial
| C, C++, Fortran
| Runtime
|-
|
| Linux (gcc)
| Free/open source
Line 106 ⟶ 129:
|-
| [[Memwatch]]
| {{Any}} (programming library)
| Free/open source
| C
Line 112 ⟶ 135:
|-
| [[mtrace]]
| {{varies|Various}}
| {{LGPL-lic|Free/open source (LGPL)}}
| GNU C library
| Built-in, outputs accesses
|-
| [[MTuner]]
| {{varies|Various}}
| {{Free}}
| C, C++
| Runtime intercepts, Link-time override (MSVC, Clang and GCC), Leak detection
Line 129 ⟶ 152:
|
|-
| [[OLIVER]] (APT international)
| [[TotalView]]▼
| MVS, MVS/EXA, DOS/VSE
| {{Proprietary}} software
| IBM Assembler
| Runtime intercepts, Hypervisor - Type 2
|-
▲| [[Rogue Wave Software|TotalView]]
| Unix, Mac OS X
| {{Proprietary}} commercial
| C, C++, Fortran
| Runtime
|-
|
| Linux, FreeBSD, Solaris/illumos, Mac OS, Android
| {{GPL-lic|Free/open source (GPL)}}
| {{Any}}
| Runtime intercepts
|-
| [[WinDbg]]
| Windows
| {{Proprietary}} freeware
| C, C++, .NET, Python
| Runtime
Line 149 ⟶ 178:
==See also==
*[[Profiling (computer programming)]]
*[[List of performance analysis tools]]
Line 162 ⟶ 191:
*Michael C. Daconta: <cite>C++ Pointers and Dynamic Memory Management</cite>, John Wiley & Sons, {{ISBN|0-471-04998-0}}
*[[Andrew Koenig (programmer)|Andrew Koenig]]: <cite>C Traps and Pitfalls</cite>, Addison-Wesley, {{ISBN|0-201-17928-8}}
{{Reflist}}
==External links==
*"[http://www.edm2.com/0508/membug.html Hunting Memory Bugs]" by Ivan Skytte Jørgensen
*"[https://web.archive.org/web/20071212210815/http://www.cs.utexas.edu/users/jpmartin/memCheckers.html Comparison of Free Memory Checkers]" by Jean-Philippe Martin {{
{{Memory management navbox}}▼
[[Category:Memory management software]]
[[Category:Debugging]]
▲{{Memory management navbox}}
|