22장. valgrind
Valgrind 는 애플리케이션을 자세히 프로파일링하는 데 사용할 수 있는 동적 분석 툴을 구축하기 위한 계측 프레임워크입니다. 기본 설치에서는 이미 5개의 표준 툴을 제공합니다. Valgrind 툴은 일반적으로 메모리 관리 및 스레드 문제를 조사하는 데 사용됩니다. Valgrind 에서는 사용자 공간 바이너리에 대한 계측을 제공하여 초기화되지 않은 메모리 사용, 부적절한 메모리 할당/삭제, 시스템 호출에 대한 부적절한 인수와 같은 오류를 확인합니다. 그 프로파일링 툴은 대부분의 바이너리에서 사용할 수 있지만 다른 프로파일에 비해 Valgrind 프로파일 실행 속도가 훨씬 느려집니다. Valgrind 는 바이너리를 프로파일링하기 위해 특수 가상 머신 내에서 실행하므로 Valgrind 가 모든 바이너리 명령을 인터셉트할 수 있습니다. Valgrind의 툴은 사용자 공간 프로그램에서 메모리 관련 문제를 찾는 데 가장 유용하며 시간별 문제 또는 커널 공간 계측 및 디버깅을 디버깅하는 데는 적합하지 않습니다.
Valgrind 보고서는 조사 중인 프로그램 또는 라이브러리를 위해 debuginfo 패키지를 설치할 때 가장 유용하고 정확합니다. 20.1절. “디버깅 정보를 사용하여 디버깅 활성화”을 참조하십시오.
22.1. Valgrind 툴
특정 도구를 선택하지 않은 경우 Mem check 가 기본 도구로 작동합니다.
- cachegrind
- cachegrind 는 CPU에서 I1, D1 및 L2 캐시의 자세한 시뮬레이션을 수행하여 코드에서 캐시 누락의 원인을 정확하게 파악하는 캐시 프로파일러입니다. 또한 각 소스 코드에 대한 캐시 누락, 메모리 참조 및 지침의 수를 표시합니다. cachegrind 도 함수별, 모듈당 및 전체 프로그램 요약을 제공하며, 각 개별 머신 명령에 대한 개수를 표시할 수 있습니다.
- callgrind
-
cachegrind
와 마찬가지로callgrind
에서는 캐시 동작을 모델링할 수 있습니다. 그러나호출grind
의 주요 목적은 실행된 코드에 대한 callgraphs 데이터를 기록하는 것입니다. - large largeif
- largestif 는 힙 프로파일러입니다. 이는 프로그램이 사용하는 힙 메모리의 양을 측정하여 힙 블록, 힙 관리 오버헤드 및 스택 크기에 대한 정보를 제공합니다. 힙 프로파일러는 힙 메모리 사용량을 줄이는 방법을 찾는 데 유용합니다. 가상 메모리를 사용하는 시스템에서 최적화된 힙 메모리 사용량이 있는 프로그램은 메모리가 부족해질 가능성이 적으며 페이징이 줄어들 때 더 빠르게 실행될 수 있습니다.
- Helgrind
POSIX pthreads 스레드를 사용하는 프로그램에서 helgrind 는 동기화 오류를 탐지합니다. 이러한 오류는 다음과 같습니다.
- POSIX pthreads API의 오용
- 잠금 문제 해결으로 발생하는 잠재적인 교착 상태
- 데이터 경쟁 (즉, 적절한 잠금없이 메모리에 액세스)