Kurztipp: Segmentation Fault von PHP mit XDebug unter Ubuntu 15.04

Unser Entwicklungsrechner lief hier lange unter Ubuntu 14.10 LTS, aber nach dem jetzt Ubuntu 15.04 da war, haben wir uns doch mal entschlossen, ein Update zu fahren, in der Hoffnung dadurch ein paar Probleme loszuwerden, die wir hatten. (Und ich wollte mal sehen, wie sich Systemd macht…). Abgesehen von einem kleinen Stromausfall während des Updates und darauf folgender Reparatur auf der Textkonsole (bei Windows wäre ein Neuinstallation nötig gewesen!), lief auch alles gut.

Was leider nicht mehr wollte, war Xdebug. Ohne Debugger liefen die PHP-Skripte perfekt, aber wenn man sie debuggte, wurde komischerweise teilweise Variablen nicht angezeigt und es kam zu sehr unerklärlichen Exceptions, gefolgt von einer tollen Meldung im Apache Log:


[core:notice] [pid 13686] AH00052: child pid 14595 exit signal Segmentation fault (11)

Weiterlesen

Segementation Fault unter Linux/Mac debuggen

Für die Uni muss ich ja nun viel C schreiben, und da gibt es ja nun mal diese wunderbaren Pointer. Sollte man davon mal eine falsch setzen bricht das Programm ab, und es gibt eine wunderbare Fehlermeldung: Segementation Fault: 11. Jetzt heißt es also, den Fehler mit jede Menge printf() eingrenzen und nach sehr viel Suchen dann evtl. auch finden.

Nach den ich heute mal wieder einen Pointer falsch hatte, habe ich mal nachgesehen, ob es nicht auch einfacher geht… Geht es natürlich… Also eine kleine Anleitung! Ich habe extra für euch ein Programm mit Fehler gebaut: Sowas würde mir sonst natürlich nie passieren 😉

Was nun? Als ersten müssen wir dem Betriebsystem sagen, dass es einen Speicherdump (coredump) erstellen soll, wenn ein Programm abstürzt. Die Dinger werden ziemlich groß, deswegen ist das normalerweise ausgeschaltet. Um es für die akutelle Shell zu aktivieren geben wir ulimit -c unlimited ein. Damit wird bei nächsten Absturz ein core-dump erstellt. Damit kommen wir schon recht weit, doch wir können das Programm noch im Debug-Modus kompilieren, damit wir noch besser sehen, was da schief gelaufen ist. Dazu einfach gcc den Parameter -g mitgeben (ja, clang kann das auch). Danach lassen wir das Programm wieder abstürzen:Na, aufgepasst? Da steht jetzt (core dumped). Nun schauen wir mal in den Ordner /cores, dort liegt unser core dump! Und er ist (für dieses einfache Programm) >300 MB groß! Das war das, was ich oben meinte…

Weiterlesen