Valgrind

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색
Valgrind
개발자 Valgrind 개발자들
운영 체제 GNU/Linux
Mac OS X
안드로이드[1]
웹사이트 www.valgrind.org

Valgrind /ˈvælɡrɪnd/리눅스 기반의 오픈소스 (GPL license) DBI 도구이다. 이는 클라이언트 프로그램 (valgrind 에 입력으로 들어가는)의 실행 코드를 실행 시간에 직접 가공하는 기회를 제공함을 뜻한다. valgrind 는 크게 코어(Core)와 도구(Tool) 로 구성되어 있는데 일반적으로 valgrind 라 함은 코어를 뜻한다.[2]

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 는 리눅스 만을 지원하고 있으며 AMD, X86, PPC, AIX, MIPS 등의 아키텍처를 지원한다.

같이 보기[편집]

참고 문헌[편집]

  1. Valgrind release notes
  2. Valgrind FAQ

바깥 고리[편집]