Valgrind
|
|
이 문서는 위키백과의 편집 지침에 맞춰 다듬어야 합니다. 더 좋은 문서가 되도록 문서 수정을 도와주세요. 내용에 대한 의견이 있으시다면 토론 문서에서 나누어 주세요. |
Valgrind는 Linux 기반의 open-source (GPL license) DBI tool 이다. 이는 client program (valgrind 에 입력으로 들어가는)의 executable code 를 실행 시간에 직접 가공하는 기회를 제공함을 뜻한다. 크게 valgrind 는 core와 tool 로 구성되어 있는데 일반적으로 valgrind 라 함은 core를 뜻한다.
개념 [편집]
Instrumentation 은 CS에서 code 에 필요한 내용을 추가하여 원하는 결과를 내도록 하는 작업을 통틀어 말한다. 이 instrumentation 이란 여러 단계에 걸쳐 일어날 수 있는데,
- source code - preprocessed code - assembly code - machine code - binary executable (실행 파일)
등의 과정에서 어느 단계에서든 가능하다. 일반적으로 static instrumentation을 의미하는 데 이는, 일단 위 단계의 코드를 분석하여 필요한 추가 코드를 삽입하는 것을 뜻한다. 그리고 instrumented code 를 실행 시켜 원하는 결과를 얻는다.
그러나 dynamic instrumentation 의 경우 runtime 에 instrumentation 을 수행하여 바로 실행토록 한다. Static instrumentation 의 경우 runtime 에 발생하는 상황을 알 수 없기 때문에 dynamic instrumentation 은 runtime 의 memory 나 cache 동작을 관찰하여 대응할 수 있는 장점이 있다.
Valgrind 는 대표적인 dynamic instrumentation framework 이다.
구조 [편집]
Valgrind 는 크게 core 와 tools 로 구성되어 있다. core 는 instrumentation 을 위한 환경을 제공해 주며 tools 은 instrumented 될 code 들을 포함한다. 모든 tool의 사용에 있어서 core 는 build 하는 과정에서 tool 의 function 들에 wrapper 를 사용하여 모든 tool 에 core 가 공통적인 동작을 수행 토록 한다.
다시 말하면 core 에 사용되는 모든 함수 (instrumentation 관련) 들은 valgrind 의 실행 파일이 생성 되는 과정 (정확히는 tools 의 실행파일 생성 과정)에서 tools 의 함수 이름을 pointing 한다. 따라서 tools 에 링크되는 core는 해당 tool 이 필요로 하는 동작을 자동으로 수행하게 되는 것이다.
확장성 [편집]
현재 valgrind 는 Linux 만을 지원하고 있으며 AMD, X86, PPC, AIX 등의 아키텍처를 지원한다. MIPS나 Windows에 대한 지원 계획은 공식적으로 없다. Valgrind 제작자의 언급에 따르면 platform 에 대한 porting 은 가능할 것으로 생각 되나, architecture porting은 불가능에 가까울 것이라 한다.