Valgrind는 C/C++ 코드에서 사용 할 수 있다.
sudo apt install valgrind # Ubuntu, Debian, etc.
sudo yum install valgrind # RHEL, CentOS, Fedora, etc.
Debug 모드로 빌드된 바이너리를 돌려야 line number 정보가 나온다.
Valgrind가 제공하는 memory checker인 "memcheck"를 이용한다.
valgrind --leak-check=full \
--show-reachable=yes \
--track-origins=yes \
--verbose \
--log-file=valgrind-out.txt \
./executable exampleParam1
-leak-check=full
: "each individual leak will be shown in detail"-track-origins=yes
: 초기화되지 않은 value들을 추적해준다 (메모리 error에 유용). Valgrind가 너무 느리면 이 옵션은 끈다.-verbose
: verbosity 모드로, 프로그램에 대한 비정상적인 동작도 리포트해준다. -log-file
: 로그 파일을 작성한다. terminal 에서 유용하다.Valgrind가 제공하는 thread checker인 "DRD"를 이용한다.
valgrind --tool=drd \
--verbose \
./executable exampleParam1
Valgrind를 돌린 결과는 다음과 같다.
HEAP SUMMARY:
in use at exit: 0 bytes in 0 blocks
total heap usage: 636 allocs, 636 frees, 25,393 bytes allocated
All heap blocks were freed -- no leaks are possible
ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
출처 https://stackoverflow.com/questions/5134891/how-do-i-use-valgrind-to-find-memory-leaks