2013-02-28 6 views
7

Ich wurde mit der Einrichtung einer Website in verschiedenen Umgebungen für verschiedene Bewertungsstufen beauftragt (dev/test/staging/etc).Wie debugge ich ein PHP-Skript, das nie geladen wird?

In unserer Staging-Umgebung scheint es jedoch einen Unterschied zu geben, der das Beenden des PHP-Skripts verhindert, sodass die Seite nie an den Browser geliefert wird.

Ich frage mich, ob es eine Möglichkeit gibt, die ich ausgeben kann, um eine Art von Stack - Trace oder Backtrace zu protokollieren, oder gibt es eine andere Methode, um herauszufinden, was genau PHP an einem bestimmten Punkt in der tut Drehbuch-Lebenszyklus?

Es ist eine Drupal-Site, also enthält es eine Menge Code, den ich nicht kenne, und es könnte Stunden dauern, ganze die; Befehle zu besprengen, um zu sehen, wo das Skript geladen wird.

Ich verstehe, ich sollte wahrscheinlich die Unterschiede in den Umgebungen betrachten, aber alle sollten sehr ähnliche Konfiguration haben (Ubuntu 11.04) und die Staging-Umgebung scheint völlig zufrieden zu sein, andere PHP-Seiten zu bedienen, während diese bestimmte Seite ablehnt zu beenden. Wenn überhaupt, verfügt diese Staging-Site über mehr Ressourcen als andere Umgebungen, die keine Probleme haben.

UPDATE: Sorry alle, fand das Problem am Ende. Die Staging-Umgebung befand sich in einem VLAN, das über öffentliche IP-Adressen nicht auf sich selbst zugreifen durfte. Aus irgendeinem Grund versuchte sie (immer noch verwirrt), während des Ladens der Seite auf sich selbst zuzugreifen und die Anfrage nie abzuschließen. Durch Festlegen eines Hosts-Dateieintrags für 127.0.0.1 wurde das Problem behoben.

+1

Haben Sie in xdebug nachgeschaut? –

+1

Ist ein Schritt-für-Schritt-Debugger eine Option? http://xdebug.org/docs/remote –

+0

Wenn Sie 'die()' 'verwenden möchten, dann tendiere ich dazu, die gleiche Methode wie beim Erraten einer Zahl von 1 bis 1000 zu verwenden. Erste Starthälfte Weg (500), und wenn es dann nicht zu diesem Punkt kommt, dann muss der Punkt vorher sein, und Sie wieder einmal die Hälfte (250) usw. – h2ooooooo

Antwort

3

Das Debuggen eines Problems wie dieses Schritt für Schritt mit einem Tool wie xDebug ist eine Option, wird aber wahrscheinlich eine lange Zeit brauchen - zu finden, wo die Breakpoints platziert werden, ist ungefähr auf der gleichen Ebene wie das Ausarbeiten Wo zu setzen die Anweisungen um den Code. Die Debugger-Option ist ein besserer Weg, es zu tun, aber wird nicht viel im Vergleich sparen, wenn Sie ein Problem wie dieses haben, wo Sie einen unbekannten Blocker irgendwo in großen Mengen unbekannten Codes haben.

Aber xDebug hat auch ein Profiler-Tool, das Ihnen zeigen kann, welche Funktionen während des Programmlaufs aufgerufen wurden, wie lange sie gedauert haben und wo die Engpässe sind. Dies wird wahrscheinlich ein besserer Ausgangspunkt sein. Konfigurieren Sie einfach xDebug, um eine Profiler-Ablaufverfolgung zu generieren, und verwenden Sie dann kCacheGrind, um die Ablaufverfolgung in einer grafischen Umgebung anzuzeigen.

Wenn Ihr Programm in einer Schleife stecken bleibt oder etwas Bestimmtes eine lange Zeit braucht, um es zu vervollständigen, wird dies das Problem fast sofort identifizieren; Sie werden genau sehen können, welche Funktion die Zeit benötigt und wie die Anrufkette aussieht, um dorthin zu gelangen.

Es ist durchaus möglich, dass Sie das Problem nur durch einen Blick auf den entsprechenden Code finden, sobald Sie das gesehen haben. Wenn das nicht möglich ist, können Sie den Debugger von xDebug verwenden, um die Funktion während der Ausführung zu analysieren und zu sehen, worauf die Variablen eingestellt sind, um zu sehen, warum die Schleife läuft.

xDebug sind hier zu finden:

+0

Schöne umfassende Antwort. Auch wenn ich es nicht mehr brauche oder Zeit habe, es auf die Probe zu stellen, werde ich dies beim nächsten Mal für das Unvermeidliche vorschreiben :) Danke! – DanH

2

Verwendung xDebug.

Es ist sehr einfach zu installieren und zu verwenden. hat es einige Optionen wie Haltepunkte und Schritt für Schritt, bevor beendet Status von PHP-Skript zu verfolgen

geladen und Sie können Schritt tutoril xDebug Download für einzurichten xdebug von hier

Schritt bei sachithsays.blogspot.com/

availble ist
Verwandte Themen