valgrind( '밸그린드' 라고 읽는다. )는 linux에서 memory leack을 비롯해서 각종 memory 관련 Error를 check해주는 Open Source Tool로 무료이다.
valgrind는 run-time상에 발생하는 memory관련 버그를 잡아주는 dynamic tool이다.
static tool로는 Clang이 있다. static tool은 코드를 실행하지 않고 코드를 검사하여 버그를 잡아준다.
나 같은 경우 Clang으로 먼저 분석하여 코드상 품질을 확보 후 valgind를 run-time으로 실행하여 static tool인 Clang으로 검출되지 않는 memory관련 버그를 검출한다.
- valgrind로 에러를 검출할 수 없는 경우는 다음 몇가지가 있다.
1. if~else, return 등 코드가 동작하지 않아 검사할 수 없는 부분, valgrind는 run-time시 동작하는 코드만 검사해준다. if~else문 등의 조건에 걸려 동작하지 않은 코드상에 있는 memory 버그는 검사하지 못한다.
2. valgrind는 부모 프로세스만 추적가능하다. 자식 프로세스는 추적할 수 없다. 자식을 추적하려면 '--trace-children=yes' 옵션을 사용해야 한다.
3. static or stack arrays 경계 침범을 검사하지는 못한다.
- valgrind 실행하는 방법
valgrind --leak-check=full -v --trace-children=yes --log-file='저장할 로그 path' 'test할 실행파일의 위치' |
'test할 실행파일'을 valgrind로 실행시키는데 옵션으로 leak check는 full로하고 -v을 주고 child 프로세스를 체크하면서 로그파일을 남긴다는 뜻이다.
시스템에 따라 한번 실행 시키는데 몇 십분씩 걸리는 경우도 있다. 끈기있게 기다려야 한다.
- valgrind에서 저장한 로그파일 분석
버전과 옵션에 따라 저장내용이 조금씩 달라질 수도 있다.
- valgrind 옵션
valgrind --help를 치면 option의 종류에 대해 알 수 있다.
'karma( 업 ) > linux' 카테고리의 다른 글
고급 Bash 스크립트 가이드( Link 글 ) (0) | 2019.05.12 |
---|---|
too many file open해결을 위한 명령어 (0) | 2019.04.14 |
strace의 마술 (0) | 2017.06.22 |
한영 변환 단축키 설정 (0) | 2017.05.29 |
Shell Script 참고 (0) | 2017.05.26 |