it-swarm.com.de

Segmentierungsfehler in PHP aufspüren?

Ich suche nach einer relativ schmerzlosen Möglichkeit, Segmentierungsfehler in PHP aufzuspüren (wie im Apache-Fehlerprotokoll angegeben). Dies ist momentan mein LAMP-Setup:

Linux: OpenSUSE 11.3 x86_64
Apache: 2.2.15-3.7
MySQL: 5.1.46-2.18
PHP: 5.3.2-1.31

Der fragliche Code ist nicht mein eigener, es ist Gallery2: http://gallery.menalto.com Ein typisches Szenario ist, dass ich zur Hauptseite der Galerie gehe und keine der Miniaturansichten erscheint, aber ich erhalte Ein neuer Satz von Segmentierungsfehlerfehlern im Fehlerprotokoll.

Angesichts der relativen Komplexität dieser Software eignet sie sich nicht besonders für einfache Formen des Debuggens. Ich möchte in der Lage sein, den Code zu durchlaufen und genau zu sehen, was passiert. "Lösungen", die ich bisher gesehen habe, waren alles andere als "relativ schmerzfrei".

Ich habe Gallery2 auf diesem Server (frühere Versionen von LAMP-Softwarepaketen) und auf anderen Servern erfolgreich verwendet. Daher gehe ich davon aus, dass in meiner aktuellen Konfiguration ein Fehler aufgetreten ist, ohne jedoch feststellen zu können, wo der Fehler auftritt reparieren oder umgehen.

3
S. W.

Darf ich vorschlagen, http://sourceforge.net/tracker/index.php?func=detail&aid=1692166&group_id=7130&atid=1071 und http://gallery.menalto.com/ node/62436 # comment-22857 ?

Es scheint häufige Probleme mit der Verwendung von Apache_setenv oder dem zweimaligen Gzippen der URL zu geben (je nach Szenario - ersteres scheint wahrscheinlicher zu sein, wenn die Thumbnails nicht angezeigt werden):

Ich glaube, dass das Problem ist, dass mod_deflate versucht, die Daten ein zweites Mal basierend auf der URL zu gzipen, was auf einigen Systemen zu Brüchen führt. In diesem Fall ist es hilfreich, die von uns gesendeten Dateien nicht zu komprimieren.


Möglicherweise liegt ein Fehler in PHP vor. Versuchen Sie, $gallery->setConfig('apacheSetenvBroken', 1); zu Ihrer config.php hinzuzufügen, um die Verwendung der Apache_setenv () - Funktion zu deaktivieren

Schätzen Sie, dass dies nicht die Antwort auf die von Ihnen gestellte Frage ist (abgesehen von der Verwendung von Zend Framework mit Plugins oder Befehlszeilen-PHP und gdb, ich weiß nicht, wie man Segfaults in PHP debuggt), aber es kann helfen.

2
Metalshark

Um PHP Segfaults zu debuggen, erstellen Sie normalerweise eine neue .php-Datei (so dass Ihr Hauptcode nicht beeinträchtigt wird) wie folgt (nennen Sie es my_first_debugger.php):

<?php
include('annoying_caller_page_that_crashes.php');
?>

Führen Sie dann gdb php aus. Wenn gdb nicht installiert ist oder sich die gdb/php-Binärdateien nicht in Ihrem Pfad befinden, treten Fehler auf. Verwenden Sie daher YaST2, um alle erforderlichen Komponenten zu installieren (holen Sie sich auch die Entwicklungs-/Debug-Bibliotheken für PHP, da diese normalerweise Debugging-Symbole enthalten).

Sie erhalten eine Ausgabe wie:

GNU gdb x.x
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
(gdb) 

Dann machen Sie einfach einen run my_first_debugger.php in der Kommandozeile.

Suchen Sie nach -dev- und -dbg-Paketen, wenn Nachrichten wie (no debugging symbols found) vorliegen oder der Name der aufgerufenen Funktion möglicherweise nicht angezeigt wird.

0
Metalshark