{{위키데이터 속성 추적}}
{{소프트웨어 정보
| 로고 = 
| 개발자 = [http://valgrind.org/info/developers.html Valgrind 개발자들]
| latest_release_version = 3.20.0
| latest_release_date = {{시작 날짜와 나이|2022|10|24}}<ref name="Valgrind News">{{인용|url=http://www.valgrind.org/docs/manual/dist.news.html |title=Valgrind News}}</ref>
| 운영체제 = [[GNU/Linux]]<br />[[macOS]]<br />[[솔라리스 (운영 체제)|솔라리스]]<br />[[안드로이드 (운영 체제)|안드로이드]]<ref>[http://valgrind.org/docs/manual/dist.news.html Valgrind release notes]</ref>
| 장르 = [[프로파일러 (컴퓨팅)|프로파일러]], [[디버거]]
| 라이선스 = [[GNU GPL]]
| 웹사이트 = {{URL|http://www.valgrind.org}}
}}

'''Valgrind'''(밸그린드, {{IPAc-en|ˈ|v|æ|l|ɡ|r|ɪ|n|d}})는 [[리눅스]] 기반의 오픈소스 ([[GPL]] 라이선스) DBI 도구이다. 이는 클라이언트 프로그램 (valgrind 에 입력으로 들어가는)의 실행 코드를 실행 시간에 직접 가공하는 기회를 제공함을 뜻한다. valgrind는 크게 코어(Core)와 도구(Tool)로 구성되어 있는데 일반적으로 valgrind 라 함은 코어를 뜻한다.<ref>[http://www.valgrind.org/docs/manual/faq.html#faq.whence Valgrind FAQ]</ref>

== Instrumentation ==
Instrumentation은 코드 세그먼트(영역)에서 코드에 필요한 내용을 추가하여 원하는 결과를 내도록 하는 작업을 통틀어 말한다. 이 instrumentation이란 여러 단계에 걸쳐 일어날 수 있는데,

* 소스 코드
* 프리프로세서(Preprocessor code)
* 어셈블리 코드
* 기계 코드
* 이진 실행 파일

등의 과정에서 어느 단계에서든 가능하다. 일반적으로 정적 instrumentation을 의미하는 데 이는, 일단 위 단계의 코드를 분석하여 필요한 추가 코드를 삽입하는 것을 뜻한다. 그리고 instrumented code를 실행시켜 원하는 결과를 얻는다.

그러나 dynamic instrumentation의 경우 runtime에 instrumentation 을 수행하여 바로 실행토록 한다. Static instrumentation의 경우 실행 중에 발생하는 상황을 알 수 없기 때문에 dynamic instrumentation은 실행 중의 메모리나 캐시의 동작을 관찰하여 대응할 수 있는 장점이 있다.

Valgrind는 대표적인 dynamic instrumentation framework이다.

== 구조 ==
Valgrind는 크게 코어와 도구들로 구성되어 있다. 코어는 instrumentation을 위한 환경을 제공해 주며 도구들은 instrumented될 코드들을 포함한다. 모든 도구의 사용에 있어서 코어는 build하는 과정에서 tool의 function들에 wrapper를 사용하여 모든 tool에 core가 공통적인 동작을 수행토록 한다.

다시 말하면 코어에 사용되는 모든 함수(instrumentation 관련)들은 valgrind의 실행 파일이 생성되는 과정 (정확히는 도구들 의 실행 파일 생성 과정)에서 도구들의 함수 이름을 pointing한다. 따라서 도구들 에 링크되는 코어는 해당 도구가 필요로 하는 동작을 자동으로 수행하게 되는 것이다.

== 확장성 ==
현재 valgrind는 [[리눅스]]와 [[macOS]], [[솔라리스 (운영 체제)|솔라리스]]를 지원하고 있으며 AMD, X86, PPC, AIX, MIPS 등의 아키텍처를 지원한다.

== 같이 보기 ==
* [[동적 프로그램 분석]]
* [[Pin (컴퓨팅)|Pin]]
* [[DynamoRIO]]

== 참고 문헌 ==
{{참고 자료 시작}}
* {{웹 인용 | 제목 = Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation | author = Nicholas Nethercote and Julian Seward | work = Proceedings of ACM SIGPLAN 2007 Conference on Programming Language Design and Implementation (PLDI 2007) | publisher = ACM | url =
http://portal.acm.org/citation.cfm?id=1250734.1250746&coll=GUIDE&dl=GUIDE&CFID=8869850&CFTOKEN=10168503 }}
* {{웹 인용 | 제목 = Using Valgrind to detect undefined value errors with bit-precision | author = Julian Seward and Nicholas Nethercote | work = Proceedings of the USENIX Annual Technical Conference 2005 | publisher = USENIX Association | url = http://portal.acm.org/citation.cfm?id=1247362&dl=GUIDE&coll=GUIDE&CFID=8869850&CFTOKEN=10168503 }}
* {{서적 인용
 | author = J. Seward, N. Nethercote, J. Weidendorfer and the Valgrind Development Team
 | 제목 = Valgrind 3.3 — Advanced Debugging and Profiling for GNU/Linux applications
 | publisher = Network Theory Ltd
 | date = March 2008
 | pages = 164 pages
 | url = http://www.network-theory.co.uk/valgrind/manual/
 | isbn = 0-9546120-5-1
 | 확인날짜 = 2013-07-23
 | 보존url = https://web.archive.org/web/20130818131906/http://www.network-theory.co.uk/valgrind/manual/
 | 보존날짜 = 2013-08-18
 | url-status = dead
 }}
{{참고 자료 끝}}
<references />

== 외부 링크 ==
* {{공식 웹사이트}}

[[분류:디버거]]
[[분류:프로파일러]]
[[분류:소프트웨어 테스트 도구]]
[[분류:자유 소프트웨어 테스트 도구]]