brunch

정적 분석 툴 이용

CPP Check

by HJH

개인적으로 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;)



keyword
매거진의 이전글make mrproper