소스 검증 툴은 크게 정적 분석 툴(static analysis tool)과 동적 분석 툴(dynamic analysis tool)로 구분 할 수 있습니다.
정적 분석 툴은 분석하고자 하는 프로그램을 실행시키지 않더라도 소스만 보고 문제를 찾아준다는 장점이 있지만,
아무래도 복잡한 소스는 문제를 완벽하게 찾아주지 못한다는 단점이 있습니다.
대표적으로 Prevent(유료)가 있습니다.
다양한 정적 분석 툴(http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis)
동적 분석 툴은 메모리에 관한 거의 모든 문제를 찾아준다는 정확성면에서 매우 큰 장점이 있지만,
프로그램을 실행 시켜야만 된다는 단점이 있습니다.
(프로그램이 매우 크다거나.. 종료되지 않고 계속 도는 데몬이라면.. 분석이 어려울 수 있습니다. )
Valgrind(무료)는 대표적인 동적 분석 툴에 해당됩니다.
동적 메모리 디버깅 툴: MEMWATCH, Valgrind, Electric Fence, etc..
그 외의 다양한 동적 분석 툴(http://en.wikipedia.org/wiki/Dynamic_code_analysis)
프로그래밍을 하다보면 메모리 누수(memory leak)를 찾지 못해 고생하는 일이 종종 발생하죠.
소스를 보기가 막막하다면 Valgrind(발그린드)의 도움을 받아보는것이 정신건강에 좋습니다.
자세한 설명은 메뉴얼을 참고하세요~
1. 설치
기본적으로 fedora와 같은 linux에는 valgrind 패키지가 포함되어 있습니다.
yum 명령어를 사용해서 손쉽게 설치가 가능합니다.
$ yum install valgrind
2. 실행
기본적으로 제공되는 도움말에 다음처럼 사용법을 제시하고 있습니다.
usage: valgrind [options] <prog-and-args>
$ valgrind --leak-check=full ./testLeak
3. 결과 분석
malloc 후에 free를 하지 않은 프로그램을 돌려보면 이런식으로 결과가 나옵니다.
1) process ID(28403)가 앞에 나옵니다.
2) 명확하게 leak이 발생한 크기(4bytes)에 대한 정보가 첫 줄에 나옵니다.
3) 'at'은 leak이 발생한 위치, 즉 malloc에 의해 메모리를 할당 했는데 free가 안됐다는걸 보여줍니다.
4) 'by'는 leak이 발생한 함수 이름이 나오죠.
$ valgrind --leak-check=full -q ./testLeak
==28403== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
==28403== at 0x4A0515D: malloc (vg_replace_malloc.c:195)
==28403== by 0x40056D: main (in /testLeak)
==28403==
옵션을 좀 더 살펴보면..
1) tool을 선택 가능합니다.
--tool=memcheck 와 같이 지정해주면 됩니다.
사실, 기본으로 [memcheck]가 선택되어 있기때문에 memcheck를 할꺼라면 별도로 지정해주지 않으셔도 됩니다.
선택가능한 옵션은 이런것들이 있답니다.
memcheck(memory), cachegrind(cache), callgrind(call-graph), helgrind(thread), etc..
2) 결과만 보고 싶다면
-q 옵션을 붙여주면, 잡다한 메시지는 보여주지 않고 에러 메시지만 출력합니다.
'IT 생활 > 리눅스&우분투' 카테고리의 다른 글
[리눅스/Linux] RPM 만드는 방법과 spec파일 작성법 (0) | 2012.10.24 |
---|---|
[리눅스/Linux] rpm에 서명넣기 자동화와 서명된 rpm 설치 (6) | 2012.08.24 |
[리눅스/Linux] 삼바(Samba) - 리눅스 파일을 윈도우에서 편집하기 (0) | 2012.05.08 |
[리눅스/Linux] 소스 자동 빌드 관리 툴 - 젠킨스(허드슨) 설정 (7) | 2012.03.30 |
[리눅스/Linux] 소스 자동 빌드 시스템 - 젠킨스(허드슨) 설치 (0) | 2012.03.29 |