{{위키데이터 속성 추적}}
'''메모리 디버거'''는 [[메모리 누수]]와 [[버퍼 오버플로]]를 찾기 위하나 [[프로그래밍 도구]]이다. 이것들은 동적 메모리의 할당과 할당 해제와 관련된 [[소프트웨어 버그]] 때문에 발생한다. [[쓰레기 수집 (컴퓨터 과학)|쓰레기 수집]]을 가진 언어들로 쓰여진 프로그램들도 메모리 디버거를 필요로 하는데, 예를 들면 콜렉션들에서 "살아있는" 참조들에 의한 메모리 누수가 발생하기 때문이다.

== 개요 ==
메모리 디버거는 메모리 접근, 할당 그리고 할당 해제를 모니터링한다. 많은 메모리 디버거들은 애플리케이션이 API들이 기존의 동적 메모리 할당 라이브러리들과 호환되거나 동적 링킹을 사용하는 특별한 동적 메모리 할당 라이브러리들로 재컴파일되기를 요구한다. Electric Fence는 이러한 디버거로서 Malloc으로 메모리 할당을 디버그한다. [[Valgrind]] 같은 몇몇 메모리 디버거들은 가상 머신 같은 환경에서 실행 파일을 돌리고 메모리 접근, 할당 그리고 해제를 모니터링해서 특별한 메모리 할당 라이브러리들로 재컴파일하는 것이 필요치 않다.

소프트웨어 에이징에서 비정상적으로 높은 메모리 활용이 기여 요소가 되기 때문에, 메모리 디버거들은 프로그래머가 컴퓨터 시스템 메모리를 소진하는 [[소프트웨어 버그]]들을 피하는데 도움을 줄 수 있다. 그래서 긴 [[런타임]] 동안 소프트웨어의 높은 신뢰성을 보장한다.

== 메모리 디버깅 도구들의 목록 ==
아래는 메모리 디버깅을 하는데 유용한 도구들의 목록이다. 프로파일러는 메모리 디버거와 함께 사용될 수 있다.
{| class="wikitable sortable cx-highlight" style="margin-bottom: 10px;"

!이름
!운영체제
!라이센스
!언어
!기법
|-
| AddressSanitizer
|리눅스, 맥 OS
| Free/open source (LLVM)
| C, C++.
| 컴파일-타임 [[인스트루먼테이션]] (available in [[클랭]] and [[GNU 컴파일러 모음|GCC]]) and specialized library
|-
| Allinea DDT
|리눅스, AIX, Blue Gene
|사유/상용
| C, C++ and F90. Also for parallel programs on supercomputers
| 런타임 - 동적 링킹 시
|-
| [http://www.alloclave.com Alloclave]{{깨진 링크|url=http://www.alloclave.com/ }}
|윈도우<br>
|사유/상용
| C++
| 컴파일 타임
|-
| AQtime
|윈도우 (비주얼 스튜디오, Embarcadero IDEs)
|사유/상용
| .NET, C++, Java, Silverlight, JScript, VBScript<ref>{{웹 인용 |url=http://smartbear.com/products/qa-tools/application-performance-profiling/profiling-managed-code |제목=보관된 사본 |확인날짜=2015-12-24 |보존url=https://web.archive.org/web/20130919153515/http://smartbear.com/products/qa-tools/application-performance-profiling/profiling-managed-code |보존날짜=2013-09-19 |url-status=dead }}</ref>
| 런타임
|-
| Bcheck
|솔라리스

|-
| BoundsChecker
|윈도우 (비주얼 스튜디오)
|사유/상용
| C++
| 런타임 인터셉트 또는 컴파일-타임
|-
| checker (deprecated in favor of valgrind)
|리눅스, 솔라리스
|자유/오픈 소스 (GPL)
| C
| 컴파일-타임 오버라이드
|-
| Daikon
| 유닉스, 윈도우, 맥 OS X<ref name="diakon_manual">http://groups.csail.mit.edu/pag/daikon/download/doc/daikon.html</ref>
|자유/오픈 소스<ref>http://groups.csail.mit.edu/pag/daikon/download/doc/daikon.html#License</ref>
| Java, C/C++, Perl, and Eiffel<ref name="diakon_manual"/>
| Runtime dynamic invariant detection
|-
| Debug_new
| (general technique)
| (general technique)
| C++
| 컴파일-타임 오버라이드
|-
| [http://deleaker.com Deleaker]
|윈도우 (비주얼 스튜디오)
|사유/상용
| C / C++
| 런타임 인터셉트
|-
| dmalloc
| Any
|자유/오픈 소스
| C
| 컴파일-타임 오버라이드
|-
| dlmalloc<ref>{{웹 인용 |url=ftp://g.oswego.edu/pub/misc/malloc.c |제목=보관된 사본 |확인날짜=2015-12-24 |보존url=https://web.archive.org/web/20170306151425/http://g.oswego.edu/pub/misc/malloc.c |보존날짜=2017-03-06 |url-status=dead }}</ref>
| Any
| 자유/오픈 소스 (public domain)
| C
| 컴파일-타임 오버라이드
|-
| [http://code.google.com/p/drmemory/ Dr Memory]
|윈도우, 리눅스
| 자유/오픈 소스 (LGPL)
| C, C++
| 런타임
|-
| Duma (fork of Electric Fence)
| Unix, 윈도우
|자유/오픈 소스 (GPL)
| C, C++
| 컴파일-타임 오버라이드
|-
| Electric Fence
| Unix
| 자유/오픈 소스 (GPL)
| C, C++
| 컴파일-타임 오버라이드
|-
| [https://web.archive.org/web/20131213083234/http://graprof.grapentin.org/ graprof]
| GNU/리눅스
|자유/오픈 소스 (GPL)
| C, (C++)
| Link-time override
|-
|HP Wildebeest (WDB)<ref>{{웹 인용 |url=http://h71028.www7.hp.com/enterprise/w1/en/os/hpux11i-developers-ecosystem.html |제목=보관된 사본 |확인날짜=2015-12-24 |archive-date=2014-07-12 |archive-url=https://web.archive.org/web/20140712122903/http://h71028.www7.hp.com/enterprise/w1/en/os/hpux11i-developers-ecosystem.html |url-status= }}</ref>

| Based on gdb
|-
|IBM OLIVER (CICS interactive test/debug)
| IBM System/360/370/390
|사유/상용
| 어셈블리어, 코볼, PL/I

|-
| IBM Rational Purify
| 유닉스, 윈도우
|사유/상용
| C++, Java, .NET
| 런타임
|-
| Insure++
|윈도우 (비주얼 스튜디오 플러그인), 유닉스
|사유/상용
| C, C++

|-
| Intel Parallel Inspector
|윈도우 (비주얼 스튜디오)
|사유/상용
| C, C++

|-
| libcwd
|리눅스 (gcc)
| 자유/오픈 소스
| C, C++
| 컴파일-타임 오버라이드
|-
| libumem
|솔라리스
|솔라리스의 번들
| 링크-타임 오버라이드
|-
| MemCheck (Hal Duston)<ref>{{웹 인용 |url=http://hald.dnsalias.net/projects/memcheck/ |제목=Memcheck - Memory Checker |확인날짜=2015년 12월 24일 |보존url=https://web.archive.org/web/20130118054616/http://hald.dnsalias.net/projects/memcheck/ |보존날짜=2013년 1월 18일 |url-status=dead }}</ref>
| 유닉스, 맥 OS X
| 자유/오픈 소스 (GPL)
| C, C++
| 컴파일-타임 오버라이드
|-
| Memcheck (Société Générale)<ref>http://v.mahon.free.fr/pro/freeware/memcheck/</ref><ref>Denis Golovan Fork: https://code.launchpad.net/~denisgolovan/memcheck/main</ref>
|윈도우 (볼랜드 델파이)
| 자유/오픈 소스
| C, C++
| 컴파일-타임 오버라이드

|-
| DDDebug<ref>http://ddobjects.de/</ref>
|윈도우 (볼랜드 델파이)
| 상용
| Delphi (5 to XE7)
| 런타임
|-
| MemPro<ref>http://www.puredevsoftware.com/MemPro.htm</ref>
|윈도우 (비주얼 스튜디오)
| Free beta
| C++
| 컴파일-타임 오버라이드, 메모리 이벤트 추적 위해 TCP 연결 사용
|-
| Memwatch
| Any (프로그래밍 라이브러리)
| 자유/오픈 소스
| C
| 컴파일-타임 오버라이드
|-
| mpatrol<ref>http://mpatrol.sourceforge.net/</ref>
|유닉스, 윈도우
| 자유/오픈 소스 (LGPL)
| C, C++

|-
| mtrace
|다양한
| 자유/오픈 소스 (LGPL)
| GNU C 라이브러리
| 빌트인, 결과 접근
|-
| MTuner
|다양한
|사유/상용
| C, C++
| 런타임 인터셉트, 링크-타입 오버라이드 (MSVC, Clang and GCC), 투수 탐지
|-
| ocp-memprof<ref>http://memprof.typerex.org/</ref>
|리눅스 64
|사유/오픈 소스
| [[OCaml]]
| 컴파일-타임
|-
| Oracle Solaris Studio (formerly Sun Studio Runtime Checking)
|리눅스, 솔라리스
| 사유 프리웨어
| C, C++, 포트란

|-
| OpenPAT<ref>[http://www.OpenPAT.org "OpenPAT: The Open Performance Analysis Toolkit"]</ref><ref>[http://www.openpat.org/docs/OpenPAT%20--%20Introduction.pdf "OpenPAT: Analyzing Programs the Easy Way"] {{웨이백|url=http://www.openpat.org/docs/OpenPAT%20--%20Introduction.pdf |date=20160122042402 }} by Dr Simon Spacey</ref>
| Any
| 프리 (requires registration)
| Any compilable language including C, C++, 자바 그리고 포트란
| 컴파일-타임 인스트루먼테이션, 런타임 인터셉트
|-
| softwareverify<ref>http://www.softwareverify.com/memory-leak-detection.php</ref>
|윈도우<br>
| 사유 상용
| .NET, C, C++, 자바, 자바스크립트, Lua, 파이썬, 루비, VMs
| 런타임
|-
| Splint
| Any
| 자유/오픈 소스 (GPL)
| C
| [[정적 프로그램 분석]]
|-
| TotalView
| 유닉스, 맥 OS X
| 사유/상용
| C, C++, 포트란
| 런타임
|-
| [[Valgrind]]
|리눅스, 맥 OS, 안드로이드
| 자유/오픈 소스 (GPL)
| Any
| 런타임-인터셉트
|-
| Visual Leak Detector<ref>{{웹 인용 |url=http://vld.codeplex.com/ |제목=보관된 사본 |확인날짜=2015-12-24 |archive-date=2015-12-15 |archive-url=https://web.archive.org/web/20151215085802/http://vld.codeplex.com/ |url-status=dead }}</ref>
|윈도우 (비주얼 스튜디오)
| 자유/오픈 소스 (LGPL)
| C, C++
| 컴파일-타임 오버라이드, 누수 탐지
|-
| [[WinDbg]]
|윈도우<br>
| 사유프리웨어
| C, C++, .NET, 파이썬
| 런타임
|-
| D Profiler<ref>https://github.com/xwlan/dprofiler</ref>
|윈도우
| 자유/오픈 소스
| C, C++
| 런타임
|}

== 같이 보기 ==
* [[프로파일링 (컴퓨터 프로그래밍)]]
* [[디버거]]
* [[소프트웨어 테스팅]]
* [[소프트웨어 공학]]
* [[컴퓨터 프로그래밍]]
* [[코어 덤프]]

== 참고 자료  ==
* Michael C. Daconta: <cite>C++ Pointers and Dynamic Memory Management</cite>, John Wiley & Sons, [[:en:Special:BookSources/0471049980|ISBN 0-471-04998-0]]
* Andrew Koenig: <cite>C Traps and Pitfalls</cite>, Addison-Wesley, [[:en:Special:BookSources/0201179288|ISBN 0-201-17928-8]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* "[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

[[분류:디버깅]]
[[분류:메모리 관리 소프트웨어]]