29 Jul – 2 Aug turned over a new month by introducing our Icinga project at Audi, our Graphic Designer and alternative tools for data transfer and compiling.
Eva began by counting 85 days to the OSMC with Jens Michelson’s presentation on “Monitoring by extending the Net-SNMP agent“.
She went on to share a little on our ongoing Icinga and LConf project at carmaker AUDI AG as our our Graphic Designer, Daniela introduced herself and her sticky note keeper.
Lastly, Blerim showed how to speed up data transfer over a network with Netcat and Michael recommended Clang as an alternative compiler to GCC.
NETWAYS Blog
clang als Compiler Alternative
gcc als Compiler ist eigentlich jedem ein Begriff, der schon mal Icinga selbst kompiliert hat. Respektive g++, sofern man sich mutig an Icinga 2 Builds heranwagt. Auf gängigen Systemen, wie etwa Debian, reicht ein
# apt-get install gcc # apt-get install g++
um damit arbeiten zu können. Um das ganze zu beschleunigen, hat mein Kollege Gunnar schon auf ccache hingewiesen 😉
Man soll ja hin und wieder über den Tellerrand schauen, und als dann FreeBSD angekündigt hat, clang als default Compiler zu verwenden, bin ich hellhörig geworden. Aber wie es halt so ist, das übliche Zeitproblem schlägt immer wieder zu – bis der erste Icinga Bug mit clang Compiler Warnings aufgemacht wurde.
Die Installation von clang ist ähnlich trivial wie gcc. In Debian Testing (jessie) sollte man lediglich beachten, dass die Pakete nach Versionen getrennt sind. clang-3.2 oder ganz frisch clang-3.4.
# apt-get install clang
Um das ganze parallel zu gcc verwenden zu können, übergibt man die Variablen direkt an make.
$ make -j4 CC=clang $ make -j4 CXX=clang++
„Am Objekt“ sieht das ganze in Icinga 2 mit dem gerade in Entwicklung befindlichen IDO Backend dann so aus:
Ich habe absichtlich einen Fehler beim Host DB Object eingebaut, der einen falschen Typ an die Funktion übergibt, die sich ein Service Object erwartet, aber einen Host bekommt. Icinga 2 kennt lediglich Servicechecks und benötigt deswegen Serviceattribute auch beim Host.
Während gcc (mit ccache) den Fehler zwar ordentlich anmeckert, sieht mans eigentlich nicht sofort.
clang hingegen illustriert das mit Farben und weist einen ebenso direkt auf den falschen String hin.
Fazit: Auch wenn wir weiterhin gcc/g++ als grundsolide Basis beim Entwickeln verwenden, clang ist mit Sicherheit eine interessante Alternative, die sich jedermann mal ansehen sollte.
Weekly Snap: From Open Shot to Mac tips, Cloud, Clang and CeBIT
16 – 20 January was packed with tips, customer news and events as well as the odd buzzword and prank call.
Markus shared his two favourite, open source video editors – OpenShot and Kdenlive while Gunnar gave the thumbs up to Clang, the C++ compiler, for static code analysis.
Following on, Angsar admired Google Docs and Tobias took a lighthearted look at the hottest IT buzzwords around the office.
Julian then explained how to create a new admin account on a Mac in 5 easy steps and Pamela announced our attendance at CeBIT on 6 – 10 March, in the Open Source Park, with free tickets to boot.
Bernd brought big news that our longstanding customer Tradoria will soon be known as Rakuten, after a successful takeover by the Japanese ecommerce giant. He also shared the latest prank call he received from a so-called Mathildenberg Foundation offering a year’s supply of olive oil.
Statische Code-Analyse mit Clang
Clang ist ein Compiler für C und C++, der als Teil des LLVM-Projekts erhältlich ist. Im Vergleich zu gcc ist er um ein Vielfaches schneller und hilft Entwickler, indem er benutzerfreundliche Fehlermeldungen ausgibt (mehr dazu unter .
Zusätzlich kann er verwendet werden, um Anwendungen statisch zu analysieren. Darunter versteht man die automatische Fehlersuche anhand des Quelltexts einer Anwendung. Da die Anwendung dabei nicht ausgeführt wird (z.B. beim Debuggen mit gdb), können hierbei nicht alle Fehler gefunden werden. Trotzdem gelingt es dem „Clang Static Analyzer“ viele mögliche Fehler zu finden:
- Verwendung von nicht-initialisierten Variablen
- Null-Pointer-Dereferenzierung
- Division durch Null
- und etliche mehr, eine vollständige Liste gibt es unter http://clang-analyzer.llvm.org/available_checks.html
Im Gegensatz zu anderen Tools, wie z.B. Splint, erstellt Clang HTML-Reports, die den Benutzer sofort erkennen lassen, wo sich die (möglichen) Fehler befinden:
In der Dokumentation von Clang ist beschrieben, wie man den Static Analyzer verwenden kann: Im einfachsten Fall muss man lediglich „scan-build ./configure“ (für autoconf-Projekte) und „scan-build make“ aufrufen, um einen Report zu erhalten.