Netidee Blog Bild
Halley's Bug und Node-Kompatibilität
Auf der Suche nach einem nicht reproduzierbaren Bug (02.08.2019)
Förderjahr 2018 / Project Call #13 / ProjektID: 3361 / Projekt: Hedgehog Cloud

Im Programmierjargon gibt es Begriffe für verschiedene Arten von Bugs, die Programmierern und Programmiererinnen ganz besondere Schwierigkeiten bringen:

  • Heisenbugs sind solche Bugs, die ihr Verhalten ändern, wenn man sie zu beobachten versucht. Die Ursachen können verschieden sein: zusätzliches Logging verändert das Timing, sodass der Fehler nicht auftritt; oder die Debug-Version eines Programms wurde anders optimiert und eliminiert den Fehler. Wo auch immer die Ursache liegt, ist es nervig solche Bugs zu untersuchen. Auch wenn der Bug leicht zu beobachten ist, die Ursache zu identifizieren ist schwer.
  • Schrödinbugs klingen besonders außergewöhnlich: zufällig findet man den Fehler im Code, aber das Programm hat scheinbar immer funktioniert. Kaum kennt man den Bug, tritt der Fehler im Programm aber jedesmal auf! Die "Katze" war erst "tot", nachdem man in die Kiste geschaut hat.

Obwohl ich den Begriff online noch nicht finden konnte, finde ich eine zusätzliche Kategorie von Bugs naheliegend:

  • Halley's Bugs sind Bugs, die nur sehr selten auftreten. Es gibt keinen bekannten Weg sie auszulösen, sie treten einfach auf, aber zu selten um sie sinnvoll untersuchen zu können.

Mit so einem Bug hatte ich es in den letzten Wochen zu tun, dazu zuerst ein bisschen Hintergrund: Hedgehog Cloud soll die Hedgehog IDE ablösen, die auf unseren Robotercontrollern installiert ist, ablösen. Langfristig soll die IDE ins Internet - das ist das Ziel dieses Projektes - aber in der Zwischenzeit übertragen wir schon einige Features in unsere "originale" Hedgehog IDE. Anfang Juni haben wir ein neues Image für den Raspberry Pi des Hedgehogs vorbereitet, mit zahlreichen Updates aus Hedgehog Cloud.

In unseren Release-Tests hat erstmal alles funktioniert, erst bei den ersten Workshops sind Fehler aufgetreten. Manchmal stürzt die IDE, also der Node-Prozess auf dem Raspberry Pi, ab. Der Bug war nicht zu reproduzieren, und so haben wir erst einmal zugewartet, aber immer wieder stürzte die IDE ab.

Danach kamen meine ersten Versuche, den Bug zu reproduzieren. Bestimmte Schritte konnte ich nicht identifizieren, aber alle drei bis sechs Stunden kam es zum Absturz; bei zehn Robotern in einem Kurs ist das nervig häufig, beim Debuggen eine Ewigkeit. Fehlermeldungen gab es auch nur unzureichend, und die Vermutung Memory Leak ließ sich nicht bestätigen: der Speicherverbrauch war konstant, bis der Prozess plötzlich beendet wurde.

Die genaue Ursache konnten wir leider nicht identifizieren, aber den Fehler konnten wir nach langem beobachten und probieren beheben: unter den Updates, die im neuen Hedgehog-Image passiert sind, war ein Update von Node 7.9.0 auf Node 8.14.0 (beides mittlerweile ziemlich alte Versionen), das anscheinend den Fehler verursacht hat - dafür sprechen zumindest etliche Stunden fehlerlose Laufzeit. Wir hoffen!

 

Bugs gibt es in verschiedensten Formen, und die offensichtlichsten lassen sich mit automatisierten Tests (oder ausgeklügelten Compilern) abfangen, aber gerade die nervigsten, für die es kein ersichtliches Muster gibt, mit denen werden wir uns weiterhin befassen müssen.

Tags:

NodeJS Bugs
CAPTCHA
Diese Frage dient der Überprüfung, ob Sie ein menschlicher Besucher sind und um automatisierten SPAM zu verhindern.