Excuse the ads! We need some help to keep our site up.

List

Clang Static Analyzer

  • Clang 정적 분석기는 C, C++ 및 Objective-C 프로그램에서 버그를 찾는 소스 코드 분석 도구 입니다.

  • Clang 정적 분석기의 목표는 자유롭고 확장 가능하며 높은 구현 품질을 갖춘 정적 분석 프레임 워크를 제공하는 것이라고 합니다.

  • Clang 정적 분석기는 독립 실행 형태 또는 Xcode 내에서 사용 할 수 있습니다.

    • 독립 실행 혙애는 명령 줄에서 호출되며 코드 베이스의 빌드와 함께 실행됩니다.

  • Clang 정적 분석기는 Clang 프로젝트의 일부이며 Open source code 입니다
    • C++ 라이브러리로 구현되어 있습니다.
  • Clang 정적 분석기는 Clang와 LLVM 위에서 동작합니다.

Important Points to Consider

Slower than Compilation

  • 정적 분석기의 분석 때문에 컴파일이 느릴 수 있습니다.
  • 정적 분석기는 빠르고 경량화되도록 설계되었지만, 프로그램을 일반적으로 컴파일하는 것만큼의 빠른 속도를 기대할 수 없습니다.

False Positives

  • 정적 분석은 완벽하지 않습니다.
  • 코드가 올바르게 작동하는 프로그램에서 버그를 잘못 표시 할 수 있습니다.

More Checks

  • 정적 분석기는 버그를 찾기 위해 특별히 설계된 버그들만 찾을 수 있습니다.

Download

Install

  • Clang를 설치하면 기본적으로 Scan-build가 설치됩니다.

Example

  • 다음과 같은 테스트 코드를 사용합니다.
Sample.c
#include <stdio.h>
#include <stdlib.h> 

int main(void)
{
    char *p = malloc(1);
    *p = 'a'; 

    char c = *p; 

    printf("\n [%c]\n",c); 

    free(p);
    c = *p;
    return 0;
}

Reading/writing memory after it has been freed

  • 다음과 같이 scan-build를 이용해 코드를 빌드합니다.
    • 빌드가 완료되면 확인된 버그의 갯수를 출력합니다.
Scan scan-build-3.7
lazenca0x0@ubuntu:/tmp/test$ scan-build-3.7 gcc test.c 
scan-build: Using '/usr/lib/llvm-3.7/bin/clang' for static analysis
test.c:14:5: warning: Value stored to 'c' is never read
    c = *p;
    ^   ~~
test.c:14:9: warning: Use of memory after it is freed
    c = *p;
        ^~
2 warnings generated.
scan-build: 2 bugs found.
scan-build: Run 'scan-view /tmp/scan-build-2017-11-29-061740-71620-1' to examine bug reports.
lazenca0x0@ubuntu:/tmp/test$
  • 다음과 같이 scan-view를 이용해 확인된 버그의 내용을 확인 할 수 있습니다.
Run scan-view-3.7
lazenca0x0@ubuntu:/tmp/test$ scan-view-3.7 /tmp/scan-build-2017-11-29-061740-71620-1
Starting scan-view at: http://127.0.0.1:8181
  Use Ctrl-C to exit.
  • 다음과 같이 웹페이지에서 구체적인 버그의 내용을 확인 할 수 있습니다.
Report
Scan-build resultsReport 1Report 2

Related site