cppcheck로 C++ 코드 정적 분석 하기
디바이스 드라이버를 개발할 때 마이크로소프트의 Prefast for drivers 를 몹시 애용한다.
미처 생각하지 못했던 실수들을 발견해서 가르쳐주기 때문에.
항상 경고 레벨을 최고로 둠과 동시에 빌드시마다 Prefast 를 자동으로 실행시켜서 경고가 발생했는지 확인하고는 한다.
이렇게 함으로써 버그를 잡을 수 있을 뿐 아니라 코드를 조금 더 정교하고 튼튼하게 만들수 있고 여러 좋은 습관들까지 몸에 배이도록 할 수있다.
이것은 거의 공짜로 주워먹는 이득이기 때문에 쓸만한 정적 분석툴을 가지고 있다면 무조건 적용시키는 것이 좋다.
나는 Prefast를 유저모드에서도 사용할 수 없을까 찾아보다가 cppcheck라는 다른 툴을 알아보게 되었다.
cppcheck
는 멀티 플랫폼에서 사용할 수 있도록 만들어졌고 오픈소스이며 분석 능력도 그럭저럭 만족스럽다.
어떤 것들을 분석해주는지는 웹사이트에 잘 나와있으며 안 읽어보더라도 조금 쓰다보면 금방 알게된다.
GUI 버전으로 실행할 수도 있고 콘솔 프로그램만으로도 결과를 얻을 수 있는데 나는 Visual Studio의 External Tools
기능을 이용해서 콘솔 프로그램만을 구동시킨다.
위 처럼 적어넣으면 내가 원할 때마다 한번씩 쉽게 분석 작업을 수행할 수 있다.
빌드 후 이벤트에 넣어서 매 빌드마다 실행되게 할 수도 있지만, 모든 프로젝트에 각각 적용시키려면 귀찮은 짓을 많이 해야한다.
External Tools
는 전역 기능이기 때문에 한번만 적어놓으면 가지고 있는 모든 VC 프로젝트에서 바로 사용이 가능하다.
나는 비주얼 스튜디오 아웃풋 윈도우로 출력을 돌리도록 설정하고 사용하는데, 이렇게 할 때는 --template vs
옵션을 주는 것이 좋다.
이 옵션을 넣으면 더블클릭을 통해 해당 소스 코드 위치로 바로 이동할 수 있도록 메세지를 다시 포맷팅 해서 출력해준다.
정말 쓸데없는 경고는 disable 시켜야 하는데 편리하고 정교하게 disable 시킬수 있는 인터페이스가 아직 없다.
이런 것들은 앞으로 더 개선될 것으로 기대한다.
함께 읽으면 좋은 글: