2017-03-09 10 views
6

나는 clang 정적 분석기를 시험해보고 싶었습니다. 나는 Windows를 사용 중이며 Visual Studio로 clang을 구축했습니다. 그것은 효과가있는 것처럼 보이지만, 동시에 그것은 매우 쓸모없는 것처럼 보입니다. Clang 정적 분석기가 가장 기본적인 문제를 찾지 못했습니다.

나는 scan-build gcc -c example.c가 오류를 발견하지 호출 예를 들어 파일

example.c

int main(void) 
{ 
    int h = 0; 
    return 1/h; 
} 

했다. scan-build gcc -c example.c 발견 에러없이 호출

example.c

int main(void) 
{ 
    int h; 
    return 1/h; 
} 

. scan-build gcc -c example.c 발견 에러없이 호출

example.c

int main(void) 
{ 
    return 1/0; 
} 

.

이러한 가장 기본적인 오류를 찾을 수없는 경우 (그리고 clang 자체에서 찾을 수 있음) 정적 분석기를 어떻게 사용할 수 있습니까?

gcc은 MinGW입니다. 나는 또한 clang을 대체하려고 시도했지만 아무 일도 일어나지 않았습니다.

여기 뭔가 잘못 되었나요?

+0

실제로이 도구는 순수한 쓰레기로 보입니다. 테스트 결과에 따르면 인터넷에 누군가가이 결론에 도달했다고 말할 필요가 없습니다. 단순히 그것을 제거하고 다른 것을 얻으십시오. – Lundin

+0

@ Lundin LLVM 프레임 워크에 믿음을 두는 프로젝트가 많이있는 것 같습니다. 모질라 재단 (Mozilla Foundation)이 지원하는 녹 언어 (Rust language). 나는 포함 된 정적 분석기가 쓸모 없다고 상상할 수 없다. 어쩌면 내가 여기에 아주 기본적인 것을 놓치고 있을지도 모른다. 일부 숨겨진 구성. – CodeMonkey

+1

필자는이 특별한 정적 분석기를 사용하지 않았지만 많은 다른 것들을 사용했습니다. 엄지 손가락의 규칙으로, 그들은 항상 수리 넘어 깨진 가정합니다. – Lundin

답변

1

실제로 clang checker가 실행 중인지 확인하려면 build-scan -v (자세한 정보 표시)를 사용해야합니다. 이 튜토리얼을 따랐다 http://web.cs.ucla.edu/~tianyi.zhang/tutorial.html C++ 예제를 시도했을 때 버그가있는 코드에는 오류가 표시되지 않았다. -v는 제공된 Makefile이 깨져 있음을 보여주었습니다. clang이 여전히 버그를 감지하지 못했지만 g ++은 버그를 보여주었습니다.

어쩌면 그들은 특정 체크를 해제했을 것입니다. Clang 정적 분석기 버전 3.8 이 자습서에서는 버전 3.2를 사용합니다.

+0

나는 Clang을 제거 할 수 없으므로 제거했다.하지만 다시 시도해야한다. – CodeMonkey

0

어쩌면 당신은 옳은 일을하지 않을 수도 있습니다. 예를 들어, 세 번째 예 비주얼 스튜디오 2015도 오류로 컴파일하기를 거부 :

error C2124: divide or mod by zero.

나는 연타가 그런 일을 감지 할 수없는 생각하지 않습니다. 그러나 이것은 중요하지 않습니다.

나는 PVS-Studio를 사용하여이 코드를 확인하기 위해 시도하고 세 가지 오류 감지 : 0으로

  • V609 나누기를. 분모 'h'== 0. MFCApplication2 mainfrm.cpp 17
  • V614 초기화되지 않은 변수 'h'가 사용됩니다. MFCApplication2 mainfrm.cpp 23
  • V609 0으로 나누십시오. 분모 '0'== 0 MFCApplication2 mainfrm.cpp 28

따라서 실험을 권장합니다. 최소한 세 번째 사례는 Clang이 정확히 찾아야합니다. 실용적인 권장 사항은 분석을 위해 PVS-Studio와 같은보다 강력한 도구를 사용하는 것입니다. 그, 그런데, Clang과 GCC의 finds errors.