2017-03-09 1 views
6

Ich wollte den Clang Static Analyzer ausprobieren. Ich bin auf Windows und baute mit Visual Studio. Es scheint zu funktionieren, aber gleichzeitig scheint es äußerst nutzlos zu sein.Clang Static Analyzer findet nicht die grundlegendsten Probleme

Ich habe eine Beispieldatei

example.c

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

Aufruf scan-build gcc -c example.c keinen Fehler findet.

example.c

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

Aufruf scan-build gcc -c example.c findet kein Fehler.

example.c

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

Aufruf scan-build gcc -c example.c findet kein Fehler.

Wenn diese grundlegendsten Fehler nicht gefunden werden können (und sie können von clang selbst gefunden werden), wie kann der statische Analysator von irgendeinem Gebrauch sein?

Mein gcc ist MinGW, wenn das zählt. Ich habe auch versucht, clang zu ersetzen, aber es passiert einfach nichts.

Mache ich hier etwas falsch?

+0

Es würde in der Tat erscheinen, dass das Werkzeug reiner Mist ist. Aufgrund deiner Tests brauchst du niemanden im Internet, der dir das sagt, du bist schon zu dieser Schlussfolgerung gekommen. Deinstalliere es einfach und hol dir einen anderen. – Lundin

+0

@Lundin Es scheint eine Menge Projekte zu geben, die Vertrauen in den LLVM-Rahmen setzen. Zum Beispiel die Sprache Rust, die von der Mozilla Foundation unterstützt wird. Ich kann mir einfach nicht vorstellen, dass der mitgelieferte statische Analysator so nutzlos ist. Vielleicht fehlt mir hier etwas sehr Grundlegendes, z.B. etwas versteckte Konfiguration. – CodeMonkey

+1

Ich habe diesen speziellen statischen Analysator nicht benutzt, aber viele andere. Als Faustregel gilt immer, dass sie irreparabel gebrochen sind. – Lundin

Antwort

1

sicher sein, Build-Scan-V (verbose) zu verwenden, um zu sehen, ob tatsächlich Clang Checker ausgeführt wird. Ich folgte diesem Tutorial http://web.cs.ucla.edu/~tianyi.zhang/tutorial.html Wenn ich das C++ Beispiel versuchte, zeigte es keine Fehler im Buggy-Code. Das -v zeigte mir, dass das mitgelieferte Makefile kaputt war - nachdem ich festgestellt hatte, dass clam die Bugs noch nicht erkannte, aber g ++ zeigt den Bug.

Vielleicht haben sie diese besondere Kontrolle ausgeschaltet. Clang Static Analyzer Version 3.8 Das Tutorial verwendet Version 3.2

+0

Ich habe Clang deinstalliert, da ich es nicht funktionierte, aber ich werde versuchen, dies zu tun, sollte ich es erneut versuchen. – CodeMonkey

0

Vielleicht machst du etwas nicht richtig. Zum Beispiel weigerte sich das dritte Beispiel Visual Studio 2015 auch mit Fehler zu kompilieren:

error C2124: divide or mod by zero.

Ich glaube nicht Clang erkennen an, dass so etwas nicht in der Lage ist. Dies ist jedoch nicht wichtig.

Ich habe versucht, diesen Code mit PVS-Studio zu überprüfen und erfasst alle drei Fehler:

  • V609 Division durch Null. Nenner 'h' == 0. MFCApplication2 mainfrm.cpp 17
  • V614 Nicht initialisierte Variable 'h' verwendet. MFCApplication2 mainfrm.cpp 23
  • V609 Division durch Null. Nenner '0' == 0. MFCApplication2 mainfrm.cpp 28

Daher empfehle ich Sie noch zu experimentieren. Zumindest sollte der dritte Fall von Clang genau gefunden werden. Eine praktische Empfehlung besteht darin, leistungsfähigere Tools wie PVS-Studio zur Analyse zu verwenden. Er übrigens finds errors in Clang und GCC.

Verwandte Themen