정적 분석 툴 이용
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 실무 프로그래밍: 초급편저자
인생은 여행, 경험주의자
최근댓글