어떤 오픈 소스 C ++ 정적 분석 도구를 사용할 수 있습니까? [닫은]

Java에는 FindBugs , CheckstylePMD 와 같은 매우 훌륭한 오픈 소스 정적 분석 도구가 있습니다. 이러한 도구는 사용하기 쉽고 매우 유용하며 여러 운영 체제에서 실행되며 무료 입니다.

상용 C ++ 정적 분석 제품을 사용할 수 있습니다. 이러한 제품은 훌륭하지만 비용은 학생에게 너무 비싸며 일반적으로 시험판을 얻는 것이 다소 어렵습니다.

대안은 여러 플랫폼 (Windows 및 Unix)에서 실행되는 오픈 소스 C ++ 정적 분석 도구를 찾는 것입니다. 오픈 소스 도구를 사용하면 특정 요구에 맞게 수정할 수 있습니다. 도구를 찾는 것은 쉬운 일이 아닙니다.

아래는 다른 사람들이 찾거나 제안한 C ++ 정적 분석 도구의 간단한 목록입니다.

어떤 무엇인가 다른 휴대용 오픈 소스 C ++ 정적 분석 도구는 누구나 알고 권장 될 수있다?

일부 관련 링크.



답변

Oink는 Elsa C ++ 프론트 엔드 위에 구축 된 도구입니다. 모질라 포크는 엘사 / 오 잉크 포크입니다.

참조 : http://danielwilkerson.com/oink/index.html


답변

CppCheck 는 오픈 소스이며 크로스 플랫폼입니다.

맥 OS X:

brew install cppcheck


답변

GNU 컴파일러와 관련하여 gcc에는 이미 -Wall에 대한 추가 경고 를 가능하게하는 내장 옵션이 있습니다 . 옵션은 -Weffc ++ 이며 그의 책 ” Effective and More Effective C ++ “에 실린 Scott Meyers 의 일부 지침 위반에 관한 것 입니다.

특히이 옵션은 다음 항목을 감지합니다.

  • 동적으로 할당 된 메모리가있는 클래스에 대한 복사 생성자와 할당 연산자를 정의하십시오.
  • 생성자의 할당보다 초기화를 선호하십시오.
  • 기본 클래스에서 소멸자를 가상으로 만듭니다.
  • “operator =”가 * this에 대한 참조를 리턴하도록하십시오.
  • 객체를 반환해야 할 때 참조를 반환하지 마십시오.
  • 접두사와 접미사 형식의 증분 및 감소 연산자를 구별합니다.
  • “&&”, “||”또는 “,”를 오버로드하지 마십시오.

답변

현재 개발 중이지만 clang 은 C 분석을 수행하며 시간이 지남에 따라 C ++를 처리하는 것을 목표로합니다. LLVM 프로젝트 의 일부입니다 .

업데이트 : 랜딩 페이지에 “분석기는 지속적인 작업 중”이라고 표시되어 있지만 C와 C ++ 모두에 대한 정적 분석기로 문서화 되었습니다.

질문 : 정적 분석을 위해 GCC / Clang을 어떻게 실행할 수 있습니까? (경고 만)

컴파일러 옵션 : -fsyntax-only


답변

다른 사람이 -Weffc ++을 언급했지만 실제로는 기본적으로 켜지지 않는 유일한 GCC 경고 중 하나입니다. 그러나 내가 설정하는 경고 세트는 키트에서 가장 중요한 정적 분석 도구입니다. 권장 경고전체 목록을 볼 수 있습니다 .

요약해서 말하자면:

-pedantic-벽 -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat = 2 -Winit-self -Wological-op -Wmissing-declarations-결산 포함 디렉토리 -Wnoexcept -Wold -스타일 캐스트-오버로드 가상-중복 데클-섀도우-워드 변환 -Wsign- 프로모션 -Null- 널 센티넬 -Wstrict-overflow = 5 -Wswitch-default -Wundef -Werror-미사용

이들 중 일부는 gcc의 새로운 버전을 필요로하므로 4.5 이상으로 멈춰 있으면 목록에서 제거해야 할 수도 있습니다.


답변

John Carmack은 또한 “정적 코드 분석”에 관한 이 흥미로운 블로그 게시물 에서 PVS-Studio 를 언급합니다 .


답변

오픈 소스가 실제로 “무료”를 의미한다면 Microsoft의 빠른 분석이 좋습니다. 물론 Windows 전용. Visual Studio와 컴파일러에 완전히 통합되어 있습니다. 예 :

cl /analyze Sample.cpp