Ausgabe_LW_2015-05
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
SPECIAL RETTEN & REPARIEREN<br />
Software-Fehler<br />
Programme mit Problemen<br />
Die Installation oder die Kompilation hat geklappt, doch das Programm will nicht<br />
laufen oder stürzt im Betrieb ab. Der folgende Beitrag zeigt Methoden, den Ursachen<br />
von Programmfehlern auf die Spur zu kommen.<br />
Von David Wolski<br />
Linux-Systeme, hinter welchen<br />
eine der großen und gut gepflegten<br />
Distributionen steht, neigen<br />
selten zu Abstürzen und Programmfehlern.<br />
Verlässt man jedoch<br />
die ausgetretenen Pfade und installiert<br />
Programmpakete aus inoffiziellen<br />
Quellen wie PPAs, gibt es immer wieder<br />
unerwartete Probleme. Auch jenseits<br />
aufwendiger Debugging-Methoden<br />
gibt es Mittel, die Ursachen hinter<br />
Abstürzen und streikenden Programmen<br />
zu finden.<br />
Terminal: Blick hinter die<br />
Kulissen<br />
Das wichtigste Tool zum Aufspüren<br />
von Fehlerquellen bleibt das Terminal.<br />
Script-Interpreter und Programme unter<br />
Unix-Systemen öffnen beim Start<br />
üblicherweise die drei Datenströme<br />
„stdin“ für die Eingabe, „stdout“ für<br />
<strong>Ausgabe</strong>n und „stderr“ für eventuelle<br />
Fehlermeldungen. Diese Aufteilung ist<br />
von C und C++ standardisiert, und so<br />
folgen auch Python, Perl und Java diesem<br />
Schema. Um die <strong>Ausgabe</strong>n von<br />
„stdout“ und „stderr“ mit zu sehen,<br />
müssen Sie ein Programm oder Script<br />
über ein geöffnetes Terminal-Fenster<br />
ausführen, das dann zur <strong>Ausgabe</strong> der<br />
Programmmeldungen dient. Ein Beispiel:<br />
Den Media-Player VLC starten<br />
Sie im Terminal mit der Eingabe von<br />
vlc<br />
und sehen dann Startmeldungen und<br />
mögliche Fehler.<br />
Tipp: Wenn Sie sich nicht sicher sind,<br />
wie der Programmname einer installierten<br />
Software lautet, die Sie normalerweise<br />
über die Desktop-Oberfläche<br />
ausführen, so sehen Sie sich die Verknüpfung<br />
an. Öffnen Sie dazu in einem<br />
Dateimanager wie Nautilus oder Dolphin<br />
die Verzeichnisse „/usr/share/applications“<br />
sowie „/usr/local/share/applications“.<br />
Hier finden Sie die<br />
Programmverknüpfungen für alle grafischen<br />
Oberflächen in Form von<br />
.desktop-Dateien. Nach einem Rechtsklick<br />
finden Sie in den „Eigenschaften“<br />
im Feld „Befehl“ den zugrunde liegenden<br />
Programmaufruf samt Parameter.<br />
Sonderfall: Binaries im Home-<br />
Verzeichnis<br />
Binaries, die manuell kompiliert oder<br />
heruntergeladen wurden und im<br />
Home-Verzeichnis oder in einem Unterordner<br />
von „/opt“ liegen, führen Sie<br />
auf andere Weise aus: Gehen Sie im<br />
Terminal in das Verzeichnis mit der<br />
Programmdatei und starten Sie diese<br />
mit dem Aufruf<br />
./[programm]<br />
wobei der Platzhalter „[programm]“<br />
für den tatsächlichen Namen der ausführbaren<br />
Datei steht. Der vorangestellte<br />
Punkt und Schrägstrich ist eine<br />
absolute Pfadangabe und eine nötige<br />
Voraussetzung unter Linux. Diese<br />
Konvention sorgt dafür, dass nicht versehentlich<br />
ein anderes, gleichnamiges<br />
Programm gestartet wird, das an einer<br />
anderen Stelle im System in der Pfadvariablen<br />
liegt.<br />
Fehlermeldungen: Interpretation<br />
und Recherche<br />
Die angezeigten Fehlermeldungen<br />
eines Programms, Scripts oder einer<br />
Java-Anwendung liefern die wichtigsten<br />
Hinweise auf die Problemursache,<br />
verlangen aber nach der richtigen<br />
Interpretation. Es gibt typische wiederkehrende<br />
Fehlerbilder.<br />
Fehlende Bibliotheken: Bei Programmen,<br />
die aus Scripts aller Art aufgebaut<br />
sind, verursachen fehlende<br />
Script-Bibliotheken gerne Abstürze sofort<br />
nach dem Start. Gerade Pythonund<br />
Perl-Scripts mit grafischer Oberfläche<br />
bauen meist auf einer größeren<br />
38 LinuxWelt 5/<strong>2015</strong>