Lesezeit ca. 10 Min.
arrow_back

Kampf den Bugs


Logo von LinuxUser
LinuxUser - epaper ⋅ Ausgabe 6/2022 vom 19.05.2022
Artikelbild für den Artikel "Kampf den Bugs" aus der Ausgabe 6/2022 von LinuxUser. Dieses epaper sofort kaufen oder online lesen mit der Zeitschriften-Flatrate United Kiosk NEWS.

Bildquelle: LinuxUser, Ausgabe 6/2022

README

Wer hin und wieder Bash-Code schreibt, der weiß, dass schon kleine und scheinbar triviale Skripte oft etwas ganz anderes tun, als man erwartet. Analog enthalten Programme aus vielen Hunderten oder Tausenden Codezeilen fast immer Fehler. Das gilt für das OpenSuse-System genauso wie für die mitgelieferten Anwendungen.

Jedem Anwender steht es frei, auch ohne Kenntnis über den Quellcode Bug Reports zu schreiben, die den Entwicklern beim Nachvollziehen von Fehlern helfen. Wenn Sie diese reproduktionstauglich beschreiben, an die richtige Stelle melden und bei Abstürzen einen sogenannten Backtrace hinzufügen, dann tragen Sie als Anwender ohne Programmierkenntnisse einen wichtigen ersten Schritt zur Fehlerbehebung bei.

In der Praxis treten Softwarefehler – im IT-Jargon Bugs – grundsätzlich häufiger auf, als man sich das wünscht. Für die Entwickler bedeutet es eine schwierige Herausforderung, das ...

Weiterlesen
epaper-Einzelheft 7,99€
NEWS Jetzt gratis testen
Bereits gekauft?Anmelden & Lesen
Leseprobe: Abdruck mit freundlicher Genehmigung von LinuxUser. Alle Rechte vorbehalten.
Lesen Sie jetzt diesen Artikel und viele weitere spannende Reportagen, Interviews, Hintergrundberichte, Kommentare und mehr aus über 1050 Magazinen und Zeitungen. Mit der Zeitschriften-Flatrate NEWS von United Kiosk können Sie nicht nur in den aktuellen Ausgaben, sondern auch in Sonderheften und im umfassenden Archiv der Titel stöbern und nach Ihren Themen und Interessensgebieten suchen. Neben der großen Auswahl und dem einfachen Zugriff auf das aktuelle Wissen der Welt profitieren Sie unter anderem von diesen fünf Vorteilen:

  • Schwerpunkt auf deutschsprachige Magazine
  • Papier sparen & Umwelt schonen
  • Nur bei uns: Leselisten (wie Playlists)
  • Zertifizierte Sicherheit
  • Freundlicher Service
Erfahren Sie hier mehr über United Kiosk NEWS.

Mehr aus dieser Ausgabe

Titelbild der Ausgabe 6/2022 von Wind of Change. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Wind of Change
Titelbild der Ausgabe 6/2022 von Prozessbestatter. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Prozessbestatter
Titelbild der Ausgabe 6/2022 von DNS-Schnüffler. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
DNS-Schnüffler
Titelbild der Ausgabe 6/2022 von Kreativwerkstatt. Zeitschriften als Abo oder epaper bei United Kiosk online kaufen.
Kreativwerkstatt
Mehr Lesetipps
Blättern im Magazin
Lehrmeister
Vorheriger Artikel
Lehrmeister
Schlüsselfertig
Nächster Artikel
Schlüsselfertig
Mehr Lesetipps

... Zusammenspiel der zigtausend Zeilen Programmcode zu verstehen, aus denen heutige Programme und Betriebssysteme bestehen. Im Team müssen sie dabei auch Änderungen der Kollegen berücksichtigen. Diesen menschenlesbaren Programmcode wandeln die OpenSuse-Entwickler durch Kompilieren in durch einen Mikroprozessor ausführbaren Maschinencode um1 1 und verpacken ihn in mit YaST oder Zypper installierbare Pakete. Alle modernen Programme setzen auf von Bibliotheken bereitgestellte Funktionen auf. Gewöhnlich nutzen unter Linux alle Anwendungen systemweit einheitliche Versionen dieser Libraries. Dass es sich dabei oft nicht um die Fassungen handelt, mit denen die Programmentwickler ihre Software testeten, sorgt für weiteres Problempotenzial.

Anlaufstellen

Typischerweise knirscht es also an zwei Stellen: Entweder entwickeln die Programmierer ihre Anwendung weiter und übersehen Auswirkungen, die eine Codeänderung an einer Stelle auf andere Bereiche hat. Oder das Einbinden eines Programms in die Systemumgebung sorgt für Probleme, die den Entwicklern entgingen, weil sie ihren Code in einer anderen Umgebung testeten.

Im ersten Fall sind die Entwickler des Programms selbst die richtige Anlaufstelle zum Melden des Bugs, im zweiten die Linux-Distributoren (siehe Kasten Anlaufstellen für Bug Reports). Durchschnittsanwendern fällt es oft schwer, zu unterscheiden, welcher Fall vorliegt. Tritt ein Problem jedoch nach einem Einspielen eines Updates ein, das nicht das Programm selbst auffrischt, liegt es nahe, auf einen distributionsspezifischen Fehler zu tippen. Spielt das Update dagegen, insbesondere unter Tumbleweed, eine neue Programmversion ein, dann liegt wahrscheinlich ein Fehler in der Software selbst vor.

Möchten Sie Bugs direkt an die Entwickler eines bestimmten Programms reporten, genügt oft eine Internet-Suche nach „Programm bugs“, um den Bugtracker zu finden. In der Regel stellen lediglich größere Projekte einen eigenen Bugtracker zur Verfügung, kleinere nutzen oft einen Quellcode-Hosting-Dienst wie Github oder Gitlab , die einen solchen mitliefern. Suchen Sie hier auf der Homepage des Programms oder per Internet-Suche zunächst nach dem Quellcode des Programms. Im Github-oder Gitlab-Projekt des Programms finden Sie dann unter dem Stichwort Issues (Probleme) an prominenter Stelle den gesuchten Meldekopf2 2 .

Sind Sie sich bezüglich der richtigen Anlaufstelle unsicher, beschreiben Sie den Fehler zunächst im OpenSuse-Forum in der Rubrik Application oder Anwendungen und bitten dort um Hilfestellung für einen Bug Report. In der Open-Suse-Community gibt es ein deutsches Forum, andere Bugtracker erwarten Englisch als Sprache für Meldungen. Für Fehler in Systemkomponenten publizieren Sie in Rubriken wie Installation/​Administration oder Hardware.

Im Zweifelsfall erweist sich der Bugtracker der Distribution als passende Anlaufstelle, um vorab erst einmal abzuklären, ob es sich möglicherweise um ein für OpenSuse spezifisches Problem handelt. Meldet sich dort ein Entwickler und bittet Sie den gemeldeten Fehler nach „upstream“ weiterzureichen, dann ver- weist er Sie mit diesem Terminus an die eigentlichen Entwickler des Programms.

Anlaufstellen für Bug Reports

Einen Account für die OpenSuse-Foren und den Bugtracker erhalten Sie auf dem IDP-Portal von Suse . Im OpenSuse-Bugzilla melden Sie Bugs in Tumbleweed und in Leap . Allgemeine Tipps zum Berichten von Fehlern liefern die deutsche sowie die besser gepflegte englische OpenSuse-Support-Datenbank.

Fehler verwaltung

Bei Bugtrackern3 3 handelt es sich um spezialisierte, entfernt an Webforen angelehnte Webanwendungen. Entwickler oder andere Anwender antworten wenn möglich auf Meldungen, zum Beispiel um nach weiteren Informationen zu fragen oder um die vorliegenden Fakten zu präzisieren. Jeder Bug Report durchläuft Phasen wie Confirmed (bestätigt – die Entwickler konnten den Bug nachvollziehen), Fixed (repariert – allerdings nicht zwangsläufig schon als stabile Version erschienen), Worksforme (bei mir geht’s – die Entwickler können den Fehler nicht nachvollziehen) oder Wontfix (werde ich nicht fixen – die Entwickler halten den Bug nicht für reparaturbedürftig). Eine Suchfunktion hilft dabei herauszufinden, ob andere den von Ihnen beobachteten Fehler bereits meldeten.

Den KDE-Bugtracker zum Beispiel erreichen Sie unter https://bugs.kde.org.KDE nutzt, wie viele andere Softwareprojekte, das Bugtracker-Urgestein Bugzilla . Es lohnt sich daher, sich diese optisch sperrige, doch funktional exzellente Webanwendung näher anzusehen. Sie begegnen ihr, oft farblich an die Projekt-CI angepasst, bei vielen größeren Softwareprojekten.

Kleinere Teams, die auf Hosting-Dienste wie Github oder Gitlab setzen, nutzen die dort integrierten Bugtracker. Sie bieten moderner gestaltete Such-Interfaces. Bei Gitlab öffnet sich nach Aktivieren des Suchfelds ein Popup, das eine Suche nach einem bestimmten Label anbietet, zum Beispiel nach Bugs, also echten gemeldeten Fehlern, oder Enhancement, also Verbesserungsvorschlägen. Bei Git- hub erreichen Sie diese Funktion über den gleichnamigen Button rechts vom Suchfeld. Schlagwörter dürfen Sie hier ebenfalls benutzen.

Abbildung4 4 zeigt einen Bug Report für einen Fehler im KDE-Dateimanager Dolphin in Zusammenhang mit dem per [F4] einzublendenden Konsolenunterfenster. Wechseln Sie die Verzeichnisse in Dolphin per Tastatur-Shortcut, zum Beispiel per [Alt]+[Pfeil-nach-links] zum Blättern in der History der besuchten Ordner, so geht die Synchronisation zwischen dem Verzeichnis im Dateimanager und der Konsole verloren.

Nehmen wir an, Sie finden einen solchen Fehler und möchten herausfinden, ob die Entwickler ihn bereits kennen. Als erste Anlaufstelle dient das Schnellsuchfeld im Bugtracker5 5 . Um den Fehler zu finden, könnten Sie dort „dolphin terminal in sync“ eingeben.

Eine trennschärfere Suche bietet der Link Search im Seitenkopf: Er öffnet ein zwar abschreckend komplex wirkendes Eingabeformular6 6 . In der Praxis genügt es aber, im Listenfeld Product das Programm dolphin auszuwählen und in das Feld Summary den Text einzutragen, den Sie in den Kommentaren finden möchten. Anders als die Schnellsuche stellt das sicher, dass die Suchergebnisse tatsächlich Dolphin betreffen und nicht bloß dieser Programmname in den Kommentaren vorkommt.

Es fällt naturgemäß schwer, per Schlagwortsuche auszuschließen, dass schon eine Meldung des von Ihnen gefundenen Bugs vorliegt. Bugtracker bringen daher eine Funktion mit, um doppelt gemeldete Bugs zusammenzufassen. Es stellt also kein größeres Problem dar, wenn mehrere Anwender denselben Fehler melden. Schlimmer wäre es, wenn die Entwickler weniger verbreiteter Programme gar keine Bug Reports erhalten: Viele Anwender wissen nicht, dass es relativ einfache Möglichkeiten gibt, einen Fehler zu melden, und dass die Entwickler sich über jeden Report freuen.

Faktenlage

Doch sehen wir uns zunächst den konkreten Bericht des Anwenders nyanpasu64 aus Abbildung4 4 an. Er kann als Beispiel für einen sinnvoll formulierten Bug Report herhalten, denn er nennt konkrete Schritte, wie sich der gemeldete Fehler reproduzieren lässt. Schließlich müssen die Entwickler den Bug erst einmal selbst beobachten, um ihn im Code aufspüren und beheben zu können. Bei jeder Fehlermeldung sollten Sie daher eindeutig nachvollziehbar Ihr Vorgehen beschreiben, als das Problem auftrat. War beim Arbeiten mit dem Programm eine Datei geöffnet, so hilft es, sie im Bugtracker als Attachment anzuhängen.

Vor Ihrem ersten Report legen Sie einen Account an. Dafür fordert der KDE-Bugtracker nach einem Klick auf New Account ganz rechts oben lediglich eine gültige E-Mail-Adresse. Dann rufen Sie über New oben links in der Kopfleiste das Formular zum Melden des Fehlers auf.Bereits voreingetragen sind die Zwischenüberschriften SUMMARY, STEPS TO REPRODUCE, OBSERVED RESULT und EX-PECTED RESULT. Für die Entwickler ist es wichtig, dass Sie nicht nur Ihre Beobachtungen zum Fehler formulieren, sondern auch Ihre Erwartung, wie das Programm denn hätte funktionieren sollen – nur um sicherzugehen, dass kein Missverständnis vorliegt. Als unverzichtbar gilt auch die Information, ob der Fehler immer in der Form auftritt, oder nur gelegentlich.

Da Probleme potenziell nur in bestimmten Systemumgebungen auftreten, benötigen die Entwickler genaue Informationen zu Ihrem Linux-System. Als Basisinformation gelten der Name und die Version der Distribution. Aus beiden zusammen lassen sich die Versionen aller vom Programm genutzten Pakete ermitteln. In KDE-Anwendungen und manchen anderen Programmen finden Sie diese außerdem im Menü Hilfe unter Über <Programm> 7 7 . Geben Sie diese Information zusätzlich zur Distributionsversion an, dann müssen die Empfänger nicht recherchieren, welche Versionen der grundlegenden Komponenten in Ihrem System vorliegen.

Bei einer laufend aktualisierten Distribution wie OpenSuse Tumbleweed lässt sich keine Distributionsversion nennen.Hier sollten Sie vor einem Bug Report zunächst alle Updates einspielen und prüfen, ob der Fehler weiterbesteht. DerKommandozeilenbefehl cat /etc/issue nennt Ihnen dann ein Release-Datum des eingespielten Updates, das Sie stets angeben sollten.

Bei einem funktionellen Bug müssen die Entwickler aus einer möglichst genauen Beschreibung der Fehlfunktion und Ihres Kontexts eruieren, wo der Fehler liegt: Was haben Sie im Programm gemacht, als es abstürzte? Wenn Sie damit eine Datei bearbeiten, erweist es sich als hilfreich, sie dem Bug Report hinzuzufügen. Auch die Informationen aus dem Dialog About im möglicherweise vorhandenen Hilfe-Menü hilft weiter. Bei Abstürzen gibt es jedoch darüber hinaus mit den sogenannten Backtraces8 8 ein mächtiges Hilfsmittel: Sie dokumentieren die Stelle im Programmcode, die für den Absturz verantwortlich zeichnet.

Nachverfolgung

Zu Beginn des Artikels gingen wir bereits darauf ein, dass die Entwickler menschenlesbaren Programmcode schreiben, auf dem Rechner des Anwenders jedoch für Menschen in der Praxis unverständlicher Maschinencode abläuft. Um aus der Stelle im Maschinencode, an der der Absturz erfolgt, auf die Stelle im Programmcode rückzuschließen, die den Fehler verursacht, steht in C-und C++-Programmen ein Debug Symbols genannter Link-Mechanismus zur Verfügung. Die meisten Anwendungen basieren auf diesen beiden Programmiersprachen.

Daher gibt es zu vielen OpenSuse-Programmpaketen ein Zusatzpaket mit dem Namensanhang ‐debuginfo, das die Debug-Symbole für das Grundpaket enthält. Um Platz zu sparen, installiert das System diese Pakete jedoch grundsätzlich nicht mit. Aussagekräftige Backtraces setzen die Debuginfo-Pakete für das Programm und alle beteiligten Bibliotheken jedoch voraus. Wenn Sie einige GByte zusätzlich belegter Plattenplatz nicht stört, ziehen Sie über den Menüpunkt Extras | Alle passenden debuginfo- Pakete installieren im YaST-Modul Software die Debug-Informationen aller installierten Pakete nach.

Es gibt aber auch ressourcenschonendere Lösungen. Am einfachsten gelingt das Erstellen von Backtraces unter KDE für KDE-Programme: Hier genügt es systemd-coredump zu installieren und das System neu zu starten. Stürzt anschließend unter KDE ein Programm ab, dann erscheint ein Popup namens Dr Konqui 9. Dabei handelt es sich um den Absturz-Handler von KDE, der die Optionen Probleme berichten und Anwendung neu starten anbietet. Verschwindet das Popup nach ein paar Sekunden, so lässt sich der Assistent KDE-Absturzbehandlung 0 0 immer noch durch einen Klick auf das Icon mit den nach unten weisenden Mundwinkeln in der Task-Leiste öffnen.

Der KDE-Crash-Assistent kümmert sich auch um die für taugliche Backtraces benötigten Debug-Informationen: Unter Tumbleweed startet der Assistent automatisch das Herunterladen von Debug-Daten. Unter Leap 15.3 erscheint im Crash-Handler der Button Debug-Symbole installieren. Ein Klick darauf öffnet ein Konsolenfenster, das nach Eingabe des Root-Passworts die benötigten Debuginfo-Pakete installiert.

Im Reiter Entwickler-Informationen der KDE-Absturzbehandlung finden Sie schließlich den Backtrace. Fügen Sie diese Absturzinformationen einem Bug Report hinzu, dann erhöht das die Chance erheblich, dass sich die Entwickler des Fehlers annehmen. Dazu drücken Sie im Crash-Assistenten zunächst [Strg]+[A] und dann [Strg]+[C], um den Backtrace-Text in die Zwischenablage zu kopieren. Alternativ speichern Sie ihn per Klick auf das Diskettensymbol als Textdatei.

Handarbeit

Allerdings funktioniert der KDE-Crash-Assistent in OpenSuse nur unter KDE und ausschließlich für KDE-Programme. Entsprechende Informationen unter anderen Desktop-Umgebungen und für Nicht-KDE-Programme zu sammeln, gelingt nicht ohne Rückgriff auf die Konsole. Die hierfür nötigen Schritte lassen sich aber relativ einfach nachvollziehen.

Um einen Backtrace ohne die Unterstützung des KDE-Assistenten zu erstellen, müssen Sie unter Leap 15.3 Ihr Benutzerkonto zunächst den Gruppen systemd-coredump und systemd-journal hinzufügen und den Rechner neu starten. YaST bietet dafür das Modul Benutzer-und Gruppenverwaltung anq q . Unter Tumbleweed gibt es von Haus aus keine Rechteprobleme. Auf beiden OpenSuse-Spielarten muss allerdings das bereits erwähnte Paket systemd-coredump aus der Paketverwaltung installiert sein.

Rufen Sie auf der Konsole nach einem Programmabsturz zunächst coredumpctl auf. Sie erhalten dann eine Liste aller Programmabstürze seit dem letzten Neustart. Achten Sie auf die Spalten PID und EXE. Die EXE-Spalte nennt die ausführbare Datei des abgestürzten Programms, anhand derer Sie erkennen, welche Zeile zum aktuellen Problem passt. Führen Sie dann coredumpctl gdb PID aus, wobei Sie die Prozess-ID oder kurz PID durch den Wert aus der gleichnamigen Spalte in der Ausgabe von Coredumpctl ersetzen. Beim Benutzen des GNU-Debuggers GDB sollten Sie Geduld mitbringen: Oft dauert es eine ganze Weile, bis sich auf der Eingabeaufforderung etwas bewegt.

In aller Regel müssen Sie nun Debuginfo-Pakete installieren. Aktivieren Sie dazu zunächst im YaST-Modul Software alle Repositories mit dem Namensbestandteil -debug. Führen Sie dann den Zypper-Befehl in Meldungen wie Missing separate debuginfos, use: zypper install gimp-debuginfo-2.10.30-lp153.2.3.x86_64 aus. Damit GDB den Text vollständig anzeigt, drücken Sie [C],[Eingabe].

Markieren Sie den ganzen zypper‐install-Befehl bis zum letzten Namen der Debuginfo-Pakete und kopieren Sie ihn in die Zwischenablage, und zwar ausnahmsweise mit [Strg]+[Umschalt]+[C].Beenden Sie GDB mit [Q],[Eingabe]. Öffnen Sie dann ein neues Konsolenfenster, loggen Sie sich dort mit su als Root ein, und fügen den Inhalt der Zwischenablage mit [Strg]+[Umschalt]+[V] ein. Ein Druck auf die Eingabetaste startet die Installation der benötigten Debug-Daten.Dann kehren Sie unter Leap zum ersten Konsolenfenster zurück (das Sie unter Tumbleweed gar nicht erst verlassen mussten), und starten dort GDB mit coredumpctl gdb PID neu.

An der GDB-Eingabeaufforderung tippen Sie nun bt full, um einen vollständigen Backtrace zu erzeugenw w . Der „magische“ Backtrace-Text, der Programmierern beim Auffinden der Fehler weiterhilft, erscheint nach [C],[Eingabe] zwischen der Zeile ‐‐Type <RET> for more, q to quit, c to continue without paging‐‐ und der GDB-Eingabeaufforderung. Markieren Sie den Abschnitt mit der Maus, kopieren Sie ihn via [Strg]+ [Umschalt]+[C], und fügen Sie ihn dem Bug Report hinzu.

Fazit

Bugs zu melden kostet ein wenig Mühe, erfordert aber kein Fachwissen über Programmierung. Meist nennt die Homepage einer Software direkt den zugehörigen Bugtracker – schließlich wünschen sich die Entwickler dieses Feedback. Bei Hosting-Plattformen wie Github oder Gitlab liegt der Bugtracker ohnehin nur einen Klick entfernt. Das Melden von Bugs erfordert jedoch jeweils das Anlegen eines Benutzerkontos. Andererseits: Wer kostenlose Software nutzt, in die andere unzählige Stunden Arbeit investieren, beteiligt sich damit mit wenig Aufwand auch ohne eigene Programmierkenntnisse durch das Melden von Fehlern konstruktiv an der Entwicklung. (tle) n

Weitere Infos und interessante Links

www.linux-user.de/qr/47738