Die Flagge des Marasek

Dekostreifen

English

Aktuell Texte Der Comic Impressum Kalender Suche PHP-Klassen Container-Wizard main.s21

Kategorien

Buch
Computer
Computerspiele
Film
Geschichte
Gesellschaft
Idee
Kunst
Natur
Persönlich
Politik
Programmieren
Religion & Philosophie
Weblog
Weltpolitik
Weltsicht
{{login}}

PHP/Segmentation fault

Permalink
Vorheriger: Was Windows auszeichnetNächster: Windows 7
Eingeordnet in: Programmieren

Eines der für mich gefürchtetsten Probleme von PHP ist der von mir so bezeichnete "Whitescreen". Dieser Fehler tritt auf, wenn das PHP-Modul höchstselbst mit einem segmentation fault oder einem anderen Fehler abstürzt. In diesem Fall stirbt der Interpreter, bevor er irgendeine sinnreiche Erläuterung dazu abgeben kann.

In diesen Fällen zahlt es sich für mich besonders aus, Anhänger von eher "rustikalen" Methoden des Debugging zu sein. Generell verzichte ich nämlich auf den Einsatz eines Debuggers, da ich in 95% der Fälle einen Bug genau genug verorten kann, um ihn mittels "echo debuggings" so schnell zu finden, dass es sich nicht lohnt, für die restlichen 5% die nötige Infrastruktur für z. B. xdebug bereitzuhalten.

Im vorliegenden Fall habe ich mich der Problematik angenähert, in dem ich den verdächtigen Codeblock auskommentiert und dann die Auskommentierung immer weiter verkleinert habe. Schliesslich war ich zum Kern des Problems vorgedrungen: eine einfache substr-Operation, um aus 14:00:00 14:00 zu machen, schlug fehl. Pikant insofern, als dass dies nur unter der Linux-Produktivumgebung, nicht aber unter Windows geschah. Leider ist es für mich keine neue Tatsache, dass PHP 5 unter Linux aus unerfindlichen Gründen instabiler ist als unter Windows.

Bis auf einen Fall haben sich Whitescreens bislang immer als kombinierte Programmfehler herausgestellt, die sowohl PHP als auch mein Skript betrafen. So auch in diesem Fall.
Denn preg_replace, explode, was ich auch nahm, schlug fehl. Bis mir langsam der Einfall dämmerte, dass ich es mir in meinem Wahn nicht hatte nehmen lassen, die aus der Datenbank zurückgelieferte Zeit in eine Instanz meiner Time-Klasse zu packen. Da ich an dieser Stelle die Zeiten benutzte, um Terminkollisionen zu prüfen, war das ein sinnvoller Schritt, nur muss ich das übersehen haben, als ich die "Kürzungsfunktion" für die menschenverträgliche Ausgabe implementiert habe.

In der Theorie auch kein Problem, da ich __toString überschrieben hatte und somit zu erwarten war, dass PHP die Objektinstanz in einen String umwandeln würde. Aber anscheinend war der Interpreter hin und wieder überfordert. Die Betonung sei auf hin- und wieder gelegt, denn der Fehler trat nur in einigen Datensätzen auf.

Und ja, ich gebe es zu: mit Java wäre das nicht passiert.

Kommentieren

Bitte beachten: Kommentare sind nicht sofort sichtbar, sondern werden erst nach einer kurzen Prüfung freigegeben, sofern keine rechtliche Beanstandung vorliegt.
Rechtlich bedenkliche Inhalte werden entweder entschärft oder nicht veröffentlicht.

* Titel  
* Nickname  
* Kommentar