2110148

Hängt sich auf

Programm-Abstürzen in Linux auf die Spur kommen

23.01.2016 | 09:44 Uhr |

Die Installation oder die Kompilation hat geklappt, doch das Programm will nicht laufen oder stürzt im Betrieb ab. Der folgende Beitrag zeigt Methoden, den Ursachen von Programmfehlern auf die Spur zu kommen.

Linux-Systeme, hinter welchen eine der großen und gut gepflegten Distributionen steht, neigen selten zu Abstürzen und Programmfehlern. Verlässt man jedoch die ausgetretenen Pfade und installiert Programmpakete aus inoffiziellen Quellen wie PPAs, gibt es immer wieder unerwartete Probleme. Auch jenseits aufwendiger Debugging-Methoden gibt es Mittel, die Ursachen hinter Abstürzen und streikenden Programmen zu finden.

Terminal: Blick hinter die Kulissen von Abstürzen

Das wichtigste Tool zum Aufspüren von Fehlerquellen bleibt das Terminal . Script-Interpreter und Programme unter Unix-Systemen öffnen beim Start üblicherweise die drei Datenströme „stdin“ für die Eingabe, „stdout“ für Ausgaben und „stderr“ für eventuelle Fehlermeldungen. Diese Aufteilung ist von C und C++ standardisiert, und so folgen auch Python, Perl und Java diesem Schema. Um die Ausgaben von „stdout“ und „stderr“ mit zu sehen, müssen Sie ein Programm oder Script über ein geöffnetes Terminal-Fenster ausführen, das dann zur Ausgabe der Programmmeldungen dient. Ein Beispiel: Den Media-Player VLC starten Sie im Terminal mit der Eingabe von

vlc

und sehen dann Startmeldungen und mögliche Fehler.

Tipp: Wenn Sie sich nicht sicher sind, wie der Programmname einer installierten Software lautet, die Sie normalerweise über die Desktop-Oberfläche ausführen, so sehen Sie sich die Verknüpfung an. Öffnen Sie dazu in einem Dateimanager wie Nautilus oder Dolphin die Verzeichnisse „/usr/share/applications“ sowie „/usr/local/share/applications“. Hier finden Sie die Programmverknüpfungen für alle grafischen Oberflächen in Form von .desktop-Dateien. Nach einem Rechtsklick finden Sie in den „Eigenschaften“ im Feld „Befehl“ den zugrunde liegenden Programmaufruf samt Parameter.

Sonderfall: Binaries im Home-Verzeichnis

Binaries, die manuell kompiliert oder heruntergeladen wurden und im Home-Verzeichnis oder in einem Unterordner von „/opt“ liegen, führen Sie auf andere Weise aus: Gehen Sie im Terminal in das Verzeichnis mit der Programmdatei und starten Sie diese mit dem Aufruf

./[programm]

wobei der Platzhalter „[programm]“ für den tatsächlichen Namen der ausführbaren Datei steht. Der vorangestellte Punkt und Schrägstrich ist eine absolute Pfadangabe und eine nötige Voraussetzung unter Linux. Diese Konvention sorgt dafür, dass nicht versehentlich ein anderes, gleichnamiges Programm gestartet wird, das an einer anderen Stelle im System in der Pfadvariablen liegt.

Fehlermeldungen: Interpretation und Recherche

Die angezeigten Fehlermeldungen eines Programms, Scripts oder einer Java-Anwendung liefern die wichtigsten Hinweise auf die Problemursache, verlangen aber nach der richtigen Interpretation. Es gibt typische wiederkehrende Fehlerbilder.

Fehlende Bibliotheken: Bei Programmen, die aus Scripts aller Art aufgebaut sind, verursachen fehlende Script-Bibliotheken gerne Abstürze sofort nach dem Start. Gerade Python-und Perl-Scripts mit grafischer Oberfläche bauen meist auf einer größeren Zahl von Bibliotheken (Modulen) auf. Es ist die Aufgabe des Paket-Maintainers einer Distribution oder bei inoffiziellen Paketen die des Entwicklers, die benötigten Komponenten als Abhängigkeiten zu referenzieren, damit der Paketmanager diese automatisch mit installiert. Das gelingt nicht allen Entwicklern, und sogar bei offiziellen Paketen kann es passieren, dass erst noch andere Abhängigkeiten manuell nachinstalliert werden müssen. In diesem Fall wird sich der Script-Interpreter über eine ungültige Methode oder über ein nicht gefundenes Modul beschweren. Ein Merkmal dieser Fehler ist die Reproduzierbarkeit bei jedem Aufruf. Zwar ist das Problem meist recht leicht mit dem Nachrüsten eines Pakets erledigt, jedoch ist der Paketname nicht aus der Fehlermeldung ersichtlich, sondern lediglich der Methoden-oder Modulname. Der erfolgversprechende Lösungsweg ist eine Suche im Web mit dem Wortlaut der Fehlermeldung. Bei großen Distributionen wie Debian , Ubuntu , Mint , Fedora und Arch ist es wahrscheinlich, dass bereits andere Nutzer auf die gleichen Schwierigkeiten gestoßen sind. Am besten ist man mit den Online-Communities beraten, die mit der eingesetzten Linux-Distribution verknüpft sind, wobei die englischsprachigen Sites aufgrund der höheren Zahl der Nutzer mehr Informationen bieten. Ebenfalls eine gute Anlaufstelle sind Frage-Antwort-Foren wie http://unix.stackexchange.com .

Pannen und Lösungen für typische Linux-Probleme

Segmentation Fault: Verabschiedet sich ein Programm mit der Meldung „Segfault“, so wurde es nach einem Speicherzugriffsfehler vom Kernel beendet. Der Auslöser kann schlicht ein Bug sein, und in diesem Fall wird sich der Absturz bei jedem Aufruf reproduzieren lassen. Treten Segfault-Meldungen ohne ein festes Muster aus, ist dies jedoch ein Hinweis auf ein Hardware-Problem.

Fehlerhafte Speicherbausteine oder zu heiß gelaufene Prozessoren machen sich ebenfalls in spontanen Segfaults bemerkbar, die dann aber nicht exakt reproduzierbar sind. Um Hardware als Ursache für dieses Fehlerbild auszuschließen, empfiehlt sich der Einsatz des Speichertestprogramms Memtest86+ . Sobald Sie Memtest86+ starten, beginnt die Überprüfung der Speicherbausteine.

Lassen Sie die Tests mehrere Durchgänge absolvieren, die unter „Pass“ angegeben sind. Je nach eingebautem Speicher müssen Sie einige Stunden für die Diagnose einplanen. Sie können dann aber sicher sein, dass die Tests ausführlich genug sind, um die meisten Fehler zu finden.

Treiber-und Gerätefehler: Stürzen Programme ab, die bestimmte Merkmale der Hardware nutzen, etwa Open GL für die Grafikausgabe, oder einen Netzwerkchip, dann liefert ein Blick in die Kernel-Meldungen mehr Informationen. Der Befehl

dmesg -T

zeigt alle Meldungen der Kernel-Logfiles mit Zeitstempel an. Hier finden Sie auch Fehlermeldungen und Warnhinweise zu allen Geräten und Treibern. Die Eingabe

dmesg -T -l err

reduziert die Ausgabe auf Fehler, und

dmesg -T -l warn

listet nur Warnhinweise. Zahlreiche normale Meldungen, wie sie der Kernel etwa für die Initialisierung von Geräten protokolliert, werden dann weggefiltert.

0 Kommentare zu diesem Artikel
2110148