2016-07-11 27 views
6

Ich habe eine sehr einfache .c-Datei, mit einigen offensichtlichen Fehlern darin.scan-build make erkennt keine Bugs

Ich versuche, das statische Code-Analyse-Tool (scan-build) von clang zu verwenden, um Fehler zu erkennen. Wenn ich führen Sie das Tool direkt auf die Dateien, wie zum Beispiel mit dem folgenden Befehl:

Scan-build g ++ -o 1 1.c

ich tun, um die beabsichtigte Ausgabe erhalten, einschließlich einer Warnung vom Compiler, der die Division durch 0.

Scan-build erwähnt: Verwenden von '/usr/lib/llvm-3.8/bin/clang' für die statische Analyse

1.c: In Funktion ‚int test2 (int) ': 1.c: 16: 11: Warnung: Division durch Null [-Wert-durch-Null] zurück 5/(x-x); ^

1.c: 16: 11: Warnung: Division durch Null zurück 5/(x-x);

~^~~~~~ 1 Warnung generiert. Scan-Build: 1 Fehler gefunden. scan-build: Führen Sie 'scan-view/tmp/scan-build-2016-07-11-152043-3028-1' aus, um Fehlerberichte zu untersuchen.

Jetzt versuche ich, diesen Befehl in ein sehr einfaches Makefile zu setzen. Die Inhalte meiner Makefile sind:

all: 1.c 
    g++ -o 1 1.c 
clean: 
    rm -f *.o 1 

Jedes Mal, wenn ich mit Make-Scan-build ausführen, mit dem folgenden Befehl:

Scan-build

machen noch ich die bekommen Warnung vom Compiler, aber nicht vom Scan-Build Tool !!!

Scan-build: Verwenden '/usr/lib/llvm-3.8/bin/clang' für die statische Analyse

g ++ -o 1 1.c

1.c: In Funktion ' int test2 (int) ':

1.c: 16: 11: Warnung: Division durch Null [-Wwd-durch-Null] zurück 5/(xx);

^scan-build: Verzeichnis '/ tmp/scan-build-2016-07-11-152326-3055-1' entfernen, da es keine Berichte enthält. Scan-Build: Keine Fehler gefunden.

Ich habe das gleiche Verhalten in C- und C++ - Dateien beobachtet. Ich sehe, dass jemand in der Vergangenheit (2012) auf similar error gestoßen war, aber die vorgeschlagene Antwort scheint nicht zu funktionieren und scheint sich nur auf C++ Dateien zu beziehen. Irgendwelche Hinweise?

Antwort

3

scan-build funktioniert durch Ersetzen der CC Variable.Verwenden Sie in Ihrem Makefile

CC=g++ 
all: 1.c 
     $(CC) -o 1 1.c 
clean: 
     rm -f *.o 1 

und es funktioniert

scan-build: Using '/usr/bin/clang' for static analysis 
/usr/share/clang/scan-build/ccc-analyzer -o 1 1.c 
1.c:16:17: warning: Division by zero 
     return 5/(x-x); // warn 
      ~^~~~~~ 
1 warning generated. 
scan-build: 1 bugs found. 
scan-build: Run 'scan-view /tmp/scan-build-2016-07-11-160529-5951-1' to examine bug reports. 
+0

Und in der Tat, dass das Problem war, die mich von Stunden für die letzten paar gehalten nervt ... Dank viel! – user307976