5.3. 프로파일 메모리 사용에 Valgrind 사용
Valgrind는 사용자 공간 바이너리에 대한 계측을 제공하는 프레임워크입니다. 이는 프로그램 성능을 프로파일링하고 분석하는데 사용할 수 있는 여러 도구와 함께 제공됩니다. 다음 부분에서 소개되는 도구는 메모리 사용 및 잘못된 메모리 할당 및 메모리 할당 해제와 같은 메모리 오류를 감지하는데 도움이 될 수 있는 분석을 제공합니다. 이러한 모든 것은 valgrind에 포함되어 다음과 같은 명령을 사용하여 실행할 수 있습니다:
valgrind --tool=toolname program
toolname을 사용하고자 하는 도구 이름 (메모리 프로파일링의 경우
memcheck
, massif
, cachegrind
)으로 변경하고 program을 Valgrind으로 프로파일링하고자 하는 프로그램으로 변경합니다. Valgrind의 계측을 사용하면 프로그램이 평소보다 더 느리게 실행되는 원인이 될 수 있음에 유의합니다.
Valgrind 기능에 대한 개요는 3.5.3절. “Valgrind”에 설명되어 있습니다. Eclipse 용으로 사용 가능한 플러그인에 대한 정보를 포함한 자세한 내용은 http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/에 있는 개발자 가이드에서 확인하실 수 있습니다. 부수적인 문서는 valgrind 패키지 설치 시
man valgrind
명령으로 확인하거나 다음의 위치에서 확인하실 수 있습니다:
/usr/share/doc/valgrind-version/valgrind_manual.pdf
,/usr/share/doc/valgrind-version/html/index.html
.
5.3.1. Memcheck로 메모리 사용량 프로파일링
Memcheck는 기본 Valgrind 도구로
--tool=memcheck
를 지정하지 않고 valgrind program
으로 실행될 수 있습니다. 발생해서는 안되는 메모리 액세스, 정의되지 않거나 초기화되지 않은 값의 사용, 올바르지 않게 해제된 힙 메모리, 중복 포인터, 메모리 누수와 같은 감지 및 진단이 어려운 여러 메모리 오류를 감지하고 보고합니다. Memcheck를 사용하면 프로그램은 일반적으로 실행되는 것 보다 10-30 배 느리게 실행됩니다.
Memcheck는 감지된 문제의 종류에 따라 특정 오류를 반환합니다. 이러한 오류는
/usr/share/doc/valgrind-version/valgrind_manual.pdf
에 포함된 Valgrind 문서에 자세히 설명되어 있습니다.
Memcheck는 이러한 오류를 보고만 할 수 있을 뿐 — 오류 발생을 방지할 수 없음에 유의합니다. 일반적으로 세그먼트 오류를 발생시킬 수 있는 방식으로 프로그램이 메모리에 액세스하는 경우 세스먼트 오류는 여전히 발생합니다. 하지만 Memcheck는 오류 직전에 오류 메세지를 기록합니다.
Memcheck는 검사 과정에 초점을 두는데 사용할 수 있는 명령행 옵션을 제공합니다. 이러한 옵션에는 다음과 같은 것이 있습니다:
--leak-check
- 활성화할 경우 Memcheck는 클라이언트 프로그램이 완료되면 메모리 누수를 검색합니다. 기본값은
summary
로 발견된 누수 수를 출력합니다. 사용 가능한 다른 값은yes
및full
로 모두 개별적 누수 세부 정보를 제공하며no
는 메모리 누수 검사를 비활성화합니다. --undef-value-errors
- 활성화할 경우 (
yes
로 설정할 경우) Memcheck는 정의되지 않은 값이 사용되고 있을 때 오류를 보고합니다. 비활성화할 경우 (no
로 설정할 경우) 정의되지 않은 값 오류는 보고되지 않습니다. 이는 기본값으로 활성화되어 있습니다. 이를 비활성화하면 Memcheck 속도가 약간 빨라집니다. --ignore-ranges
- 적용 가능성을 검사할 때 사용자는 Memcheck가 무시해야 하는 하나 이상의 범위를 지정할 수 있습니다. 여러 범위는 다음과 같이 콤마로 구분합니다. 예:
--ignore-ranges=0xPP-0xQQ,0xRR-0xSS
옵션의 전체 목록은
/usr/share/doc/valgrind-version/valgrind_manual.pdf
에 있는 문서에서 참조하십시오.