scan-build를 이용한 정적분석

scan-build 란?

scan-build는 clang이 제공하는 정적 분석 도구다. clang은 llvm 기반 컴파일러 프론트엔드이며, GPL 라이센스로 묶여 있는 GNU 컴파일 도구모음(gcc)을 대체하기 위해 bsd 라이센스와 유사한 llvm 라이센스 오픈소스 프로젝트로 개발되고 있다.

 

 

설치

scan-build는 컴파일 도구 모음인 clang에 포함되어 있기 때문에 clang을 설치하면 된다.

  • Ubuntu
$ sudo apt-get install clang
  • OS X
$ brew install llvm --with-clang

 

 

사용 방법

사용 방법은 간단하다. 빌드 명령 앞에 scan-build만 붙여주면 된다. 기존에 사용하던 makefile을 그대로 사용할 수 있어 별도의 makefile을 구성할 필요가 없다.

scan-build [options] <build command> [build options]
  • 예시
$ scan-build make -j4
$ scan-build xcodebuild
$ scan-build gcc -c t1.c t2.c
$ scan-build clang -c t1.c -o t1.o

 

 

분석 결과

분석은 빌드와 동시에 진행되며 빌드가 끝나면 결과를 취합하여 결과 파일을 생성해준다. 그리고 친절하게 scan-view를 실행해 결과를 확인하라는 메시지를 보여준다. scan-view는 scan-build의 결과물을 웹브라우저를 통해 볼 수 있도록 해준다.

$ scan-build make
...
scan-build: 4 bugs found.
scan-build: Run 'scan-view /var/folders/rl/9lcrrvvj5qddmh8kq752xggw0000gn/T/scan-build-2016-05-11-114621-16674-1' to examine bug reports.
$

scan-view를 실행해 결과파일을 열어보면 다음과 같은 화면을 볼 수 있다.

scan-build_result

빌드 환경과 발생 가능한 bug 에 대한 요약, 각 bug에 대한 분석 내용을 확인할 수 있다. 개별 분석 결과는 view report 링크를 통해 확인할 수 있다.

scan-view_report