Open Source im professionellen Einsatz

© rokit_de, photocase.com

OpenGL-Anwendungen debuggen mit Bugle

Zum Angriff auf die Bugs

Das Entwanzen von OpenGL-Anwendungen bereitet Kopfschmerzen. Der Allzweckreiniger GDB liefert meist zu wenig hilfreiche Informationen, ganz zu schweigen von dem fehlenden Einblick in Shader und Texturen. Zeit also für einen Debugger, der OpenGL bei den Hörnern packt.

Seit nunmehr über zwei Jahren bastelt Bruce Merry an einem kostenlosen und vollständig auf OpenGL-Anwendungen spezialisierten Debugger. Das Bugle (englisch für Jagdhorn) getaufte Werkzeug setzt sich als Wrapper-Bibliothek zwischen das zu untersuchende Programm und die OpenGL-Bibliothek, um die anfallenden Funktionsaufrufe zu überwachen. Auf Grund dieses Tricks arbeitet es sogar mit bereits fertigen Anwendungen ohne eingearbeitete Debug-Informationen.

Je nach Bedarf protokolliert Bugle die gesammelten Informationen, erzeugt Statistiken (beispielsweise über die Framerate), aktiviert nach jedem Funktionsaufruf »glGetError()«, um den Fehlerkanal auszulesen, erzwingt einen Wireframe-Modus, schießt Screenshots oder zeichnet Videos auf. Als Bonus gibt es zusätzlich noch ein GDB-ähnliches Hilfsprogramm, und zwar einschließlich einer grafischen Oberfläche, die auch Shader und Texturen inspiziert.

Allerdings sollten Anwender nicht zu früh jubeln: Trotz der langen Entwicklungszeit befindet sich Bugle noch immer in einem frühen Alphastadium. Auch wenn vieles schon stabil läuft, tauchen immer wieder vereinzelt Probleme auf. Das gilt insbesondere bei neuen Grafikkarten oder herstellerspezifischen OpenGL-Erweiterungen.

Funktionsweise

Bugle gibt es derzeit nur als Quellcode-Paket über die offizielle OpenGL-Seite unter [1]. Die Voraussetzungen für die Übersetzung nennt der Kasten "Abhängigkeiten". Die anschließende Übersetzung und Installation erfolgt mit dem bekannten Dreisatz »./configure; make; make install« und einem sicherheitshalber nachgeschobenen »ldconfig«.

Abhängigkeiten

Bugle selbst ist recht genügsam. Für die Übersetzung des Quellcode und den Betrieb setzt es lediglich folgende Pakete voraus:

  • Perl 5
  • GCC 3.2 oder höher (nicht 4.0), wobei es sowohl den C- als
    auch den C++-Compiler benötigt
  • Ffmpeg, sofern Video-Aufzeichnungen gewünscht sind
  • GNU Readline (zum Editieren der History in Gldb)
  • GTK+ für »gldb-gui«
  • Gtkglext für »gldb-gui«; fehlt dieses Paket,
    funktioniert die Anzeige der Texturen nicht

Bugle hängt sich zwischen die Anwendung und die OpenGL-Bibliothek »libGL«. Damit dies auch bei jeder fertigen Anwendung klappt, verbündet sich Bugle mit dem dynamischen Linker. Dieser erlaubt es über die Umgebungsvariable »LD_PRELOAD«, weitere, dynamische Bibliotheken in das Programm zu laden. Bei diesem als Library Interposition bezeichneten Verfahren biegt der Linker alle passenden Funktionsaufrufe auf die eingeschmuggelte Bibliothek um.

Wie am Fließband

Sobald Bugle auf diese Weise aktiviert ist, fängt es jeden OpenGL-Funktionsaufruf ab. Er durchläuft dann eine oder mehrere von Bugles Bearbeitungsstationen, bevor er schließlich wieder an OpenGL durchgereicht wird.

Bildlich kann man sich diesen Vorgang wie ein Fließband vorstellen, auf dem der Funktionsaufruf an mehreren Arbeitern vorbeiläuft. Jeder dieser Arbeiter erledigt eine bestimmte Aufgabe, beispielsweise "Schieße Screenshot" oder "Notiere den Aufruf in einem Log". Anschließend reicht er den Funktionsaufruf an seinen Nachfolger weiter. Einen solchen Arbeiter bezeichnet Bugle als Filter-Set (kurz Filter), das zusammen am Fließband eine Chain (Kette) bildet.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3,5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook