Für was ist LLVM/Clang gedacht?

Es ist ein kleines Kommandozeilen-Tool zum aufspüren von Memory Leaks und anderen Problemen im Sourcecode. Dies kann und sollte auch mit dem Apple Tool Instruments durchgeführt werden.
Der Unterschied ist, dass Instruments zur Laufzeit der App nach Memory Leaks sucht und LLVM/Clang den Sourcecode analysiert und wesentlich mehr Probleme findet.

Vorbereitung

Zuerst steht der Download von LLVM/Clang an: http://clang.llvm.org/StaticAnalysis.html

Zu dem Zeitpunkt (16.05.2009) als ich diesen Artikel schrieb war das Paket „checker-0.208.tar.bz2“ (vom 15.05.2009) das Aktuellste.

Zoom image


Installation

Den Download entpacken und irgendwo auf der Festplatte ablegen. Ich habe es an folgender Stelle abgelegt:
/Users/of/Documents/develMac/checker-0.208

Damit ich das Kommandozeilen-Tool direkt aus dem Terminal aufrufen kann, habe ich noch den $PATH meiner Shell erweitert. Dazu habe ich am Ende meiner /Users/of/.profile Datei die folgende Zeile eingefügt:
export PATH=$PATH:/Users/of/Documents/develMac/checker-0.208

Verwendung / Aufruf

Ihr öffnet das Terminal und wechselt in das Verzeichnis eures iPhone Projektes (dort liegt die *.xcodeproj):
of@/Users/of> cd Documents/devel_iPhone/HappyDayz\!/

Als nächstes ist das existierende build-Verzeichnis zu löschen (siehe weiter unten unter Probleme):
of@/Users/of/Documents/devel_iPhone/HappyDayz!> rm -rf build

Und nun kann LLVM/Clang gestartet werden:
of@/Users/of/Documents/devel_iPhone/HappyDayz!> scan-build -k -V xcodebuild -configuration Debug -sdk iphonesimulator2.2

Nachdem alles kompiliert und analysiert wurde startet LLVM/Clang seinen eingebauten Webserver und öffnet automatisch das Ergebnis in eurem Webbrowser.

Ergebnisse

Das waren die überraschenden Ergebnisse von HappyDayz! nach dem ersten Lauf. Über den Link „View Report“ werden die problematischen Sourcecode Stellen sehr schön angezeigt.

Zoom image

Nun geht es zur Überprüfung des Sourcecodes ...

Probleme

Bei den ersten Versuchen den LLVM/Clang zum Laufen zu bekommen, bekam ich immer folgende Meldung:
scan-build: Removing directory '/var/folders/T9/T9rv95xeEfec69DKrp2t+U+++TI/-Tmp-/scan-build-2009-05-16-5' because it contains no reports.

Das konnte ich beheben indem ich einfach das komplette build-Verzeichnis in meinem Projektordner gelöscht habe: rm -rf build