Segmentation Faults – Der schlimmste aller Fehler ist …

Wie geht es weiter, nachdem der Fehler lokalisiert wurde?

Sobald die fehlerhafte Funktion lokalisiert wurde, wird klar ob der Fehler aus einer Erweiterung oder dem PHP-Core heraus erzeugt wird. In beiden Fällen ist es hilfreich den PHP Bug Tracker zu durchsuchen ob in der PHP-Erweiterung mit der gerade genutzten Version ein Fehler aufgetreten ist. Die Versionen werden über php -i an der Kommandozeile oder durch einen Aufruf eines PHP Files mit der Funktion phpinfo() angezeigt und können dann einfach mit denen der Fehlerberichte des Bug Trackers verglichen werden. Das Ziel ist es herauszufinden, ob möglicherweise schon ein Patch für genau das Problem besteht. Falls kein Bericht zu dem Fehler besteht kann man einfach einen Bug-Bericht schreiben und sogar den Fehler selbst beheben. Damit das Projekt nicht beeinträchtigt wird, sollte geprüft werden ob ein Workaround (z. B. die Nutzung einer anderen PHP-Funktion) helfen kann, den Segmentation Fault zu vermeiden.

Fazit

Die Suche nach der Ursache eines Segmentation Faults ist mit dem Einsatz entsprechender Werkzeuge relativ einfach. Der Gnu-Debugger bietet für Unix/Linux- und Mac-Systeme eine schnelle Möglichkeit die Ursache für den Segmentation Fault zu finden. Dazu sind einige Vorbereitungen notwendig, die unter anderem PHP-Debug-Symbole voraussetzen. Die PHP Binaries mit Debug-Symbolen sollten dem Entwickler über den Entwicklungsprozess schnell und einfach zur Verfügung stehen. Dazu bieten die meisten Linux-Distributionen eine einfache Nachinstallation über das Paketmanagementsystem. Manchmal kann es schneller und einfacher sein mit einem PHP-Debugger das Problem einzugrenzen. Der PHP-Debugger oder die Debugging-Möglichkeit, mit echo, print oder vardump aus PHP heraus zu arbeiten, kann das Problem nur eingrenzen. Wenn das Problem lokalisiert wurde und eine Reproduktion möglich ist, ist der Bug Tracker von PHP eine gute Möglichkeit, auch der Community zu helfen, das Problem zu lösen. In der neuesten PHP-5-Version 5.3.8 für Debian Squeeze von dotdeb.org ist der Segmentation Fault übrigens nicht mehr zu reproduzieren.

Mike Lohmann arbeitet als Software Architect für die Hamburger ICANS GmbH. Seit 13 Jahren beschäftigt er sich mit der Webentwicklung und seit elf Jahren mit PHP. Mike schreibt ab und zu für Nils Blog www.phphatesme.com und Magazine wie das PHP Magazin oder IX.

Nils Langner studierte Informatik an der Universität in Freiburg und ist derzeit beruflich unterwegs als Qualitätsmanager bei Gruner+Jahr, Europas größtem Verlagshaus, das unter anderem Titel wie Stern, Finacial Times Deutschland, Gala und Brigitte beheimatet. In seiner Freizeit betreut er Deutschlands erfolgreichsten PHP-Blog www.phphatesme.com, in dem er drei Mal die Woche über Themen aus der Softwaretechnik berichtet.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.