정적 분석 툴 이용

CPP Check

byHAJUNHOAug 06. 2018

개인적으로 coverity의 Prevent를 항상 쓸 수 있다면, ... 하지만 비싸서 대기업에서나 쓴다. 수년간 삼성전자에서 정적 분석 및 소스 수정을 담당했었는데, 퇴직하고 나니 그 정도의 대규모 프로젝트를 할 일이 없어, 사실 쓸일이 없었다. 이번 강의 중 정적분석 과정이 있었는데 다른 강사에게 이론만 듣고 준비된 자신의 소스를 실제 돌려보지 못해서 뜬구름만 잡고 있는 것 같아서 Alternatives를 찾았다. 사실, 이번이 처음이 아니라 작년에도 같은 일이 있었고 이번에는 소스 준비를 위해 내 강의 시간도 따로 많이 할애를 한 터라 내가 직접 알려주는게 좋겠다는 생각이었다. 학생들의 프로그래밍 실력이 높아 20분 정도만 알려줘도 알아서 찾으리라 생각되고 이 포스팅도 거기에 맞추었다.

 

설치

sudo apt-get install cppcheck

 

실행

cppcheck --enable=all --check-config a.c

 

끝. 끗. Fin.


#include <stdio.h> 

 

int main() 

        int a[10] = {0,}; 

        printf("%d", a[10]); 

의 경우

[a.c:7]: (error) Array 'a[10]' accessed at index 10, which is out of bounds.

 

요렇게 bound 검사를  해준다.

 

#include <stdio.h>

#include <stdlib.h>

int main()

{

        int *a = (int *)malloc(sizeof(int)*4);

        //free(a);

}

의 경우 사용치 않을 때 unused 변수 췍, free 안해서 메모리 릭 발생시 체크 해 준다.

[b.c:6]: (style) Variable 'a' is assigned a value that is never used.

[b.c:8]: (error) Memory leak: a

 

난 간단히 a.c, b.c로 예제를 만들어서 Makefile은 이렇다.

 

SRC = a.c b.c 

default : check $(SRC).out 

.out = .out  

check : $(SRC) 

        cppcheck --enable=all $^  

$(SRC).out : $(SRC) 

        $(foreach var, $(SRC), gcc $(var) -o $(var).out;)

 

 

HAJUNHOETRI 출간작가

C&JAVA 실무 프로그래밍: 초급편저자

인생은 여행, 경험주의자

구독자 448

 

'Blog History' 카테고리의 다른 글

511  (2) 2020.06.16
510  (0) 2020.06.15
507  (0) 2020.06.15
506  (0) 2020.06.15
505  (0) 2020.06.15

+ Recent posts