Heim >Backend-Entwicklung >PHP-Tutorial >PHP Master | Debugging und Profiling PHP mit XDEBUG

PHP Master | Debugging und Profiling PHP mit XDEBUG

William Shakespeare
William ShakespeareOriginal
2025-02-25 23:30:11780Durchsuche

xDebug: leistungsfähiges Debugging- und Leistungsanalyse -Tool für PHP -Entwickler

Kernpunkte:

  • xDebug ist eine leistungsstarke, kostenlose und Open -Source -PHP -Erweiterung, die Debugging -Unterstützung, Stapelverfolgung, Leistungsanalyse, Codeabdeckung und andere Funktionen bietet. Es ermöglicht Entwicklern, die Ausführung der Anwendung jederzeit zu pausieren und den Wert von Variablen zu überprüfen, um besser zu verstehen, wie PHP ausgeführt wird.
  • xDebug kann als Leistungsanalyse -Tool für PHP -Anwendungen verwendet werden, wobei wichtige Details wie Aussagen und Funktionen Ausführungszeit und Anzahl der Anrufe aufgezeichnet werden. Durch die Analyse dieser Ausgänge können Sie verstehen, wo der Engpass liegt, und so Ihre Leistung für die Leistung optimieren.
  • Um xDebug zu verwenden, muss es ordnungsgemäß installiert und konfiguriert werden. Xdebug ist in Xampp oder MAMP vorinstalliert. Aktivieren Sie es einfach in php.ini. Für andere Plattformen kann es über den Paketmanager installiert werden. Es ist zu beachten, dass die Verwendung anderer Zend -Erweiterungen mit Xdebug in Konflikt stehen kann.

PHP ist die beliebteste Sprache in der Webentwicklung, wurde jedoch oft wegen des Fehlens eines geeigneten Debuggers kritisiert. Entwickler, die Sprachen wie Java und C# verwenden, können leistungsstarke Suiten von Debugging -Tools verwenden, die häufig direkt in ihre IDES integriert sind. Die Trennung von Webservern und PHP -IDEs hat uns jedoch daran gehindert, viele der gleichen Tools zu verwenden. Wir fügen dem Code manuell Debug -Anweisungen hinzu ... bis XDEBUG diese Lücke füllt. Xdebug ist ein kostenloses Open -Source -Projekt, das von Derick Rethans erstellt wurde und wahrscheinlich eine der nützlichsten PHP -Erweiterungen ist. Es bietet nicht nur grundlegende Debugging -Unterstützung, sondern auch Stapelverfolgung, Leistungsanalyse, Codeabdeckung und mehr. In diesem Artikel wird erläutert, wie Sie XDEBUG installieren und konfigurieren, wie man PHP -Anwendungen von NetBeans debuggen und Berichte zur Leistungsanalyse in KCACHEGRIND lesen.

installieren und konfigurieren XDEBUG

Wenn Sie XAMPP oder MAMP verwenden, ist Xdebug vorinstalliert. Wenn Sie eine paketbasierte Installation auf Plattformen wie Ubuntu verwenden, können Sie sie über den Paketmanager mit einem Befehl wie apt-get install php5-xdebug installieren. Der Eintrag für Xdebug in meinem php.ini sieht folgendermaßen aus:

<code>[xdebug]
zend_extension="/Applications/MAMP/bin/php5.2/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000</code>

zend_extension Geben Sie den Pfad zum XDebug -Modul an. xdebug.remote_enable ob die Wertschaltererweiterung aktiv ist. xdebug.remote_host ist Ihr Systemname oder Ihre IP -Adresse (hier habe ich localhost angegeben, da ich beide auf demselben Computer arbeite. Wenn Sie jedoch einen anderen Wert für Ihre Einstellungen angeben müssen, kann der Wert eine IP -Adresse oder ein DNS -Hostname sein) . xdebug.remote_port ist der Port, an dem der Client von der XDEBUG -Verbindung hört (9000 ist der Standard). Stellen Sie bei der Verwendung von XDEBUG sicher, dass Sie keine anderen Zend -Erweiterungen verwenden, da sie mit XDebug in Konflikt stehen. Es gibt andere Installationsoptionen. Die XDEBUG -Website bietet einen einfachen Assistenten, der Sie durch den Installationsprozess führt. Sie können die Ausgabe von phpinfo() oder php –i erhalten, in ein Textfeld einfügen, den Assistenten Ihre Serverkonfiguration analysieren und Sie zum Kompilieren von XDEBUG auf Ihrem Computer leiten.

debugg

Normalerweise ist es verlockend, eine Kombination von var_dump() und exit/die() zu debuggen. Das Problem bei diesem Ansatz ist jedoch, dass Sie den Code zum Debuggen ändern müssen. XDEBUG überwindet dies, indem Sie die Ausführung Ihrer Anwendung überall, wo Sie sie benötigen, pausieren können. Sie können dann die Werte von Variablen in diesem Bereich überprüfen, um besser zu verstehen, wie PHP ausgeführt wird. Sie können Netbeans problemlos so konfigurieren, dass sie als XDEBUG -Client fungieren. Öffnen Sie das Optionsfenster (Tools & GT; Optionen) und wechseln Sie im Abschnitt PHP zur Registerkarte Debug. Geben Sie den in Php.ini angegebenen Debug -Port und die Sitzungs -ID ein, und Sie müssen die Sitzungs -ID mit der Anforderung übergeben, die Sie debuggen möchten. Sie können jetzt den Debugger ausführen, indem Sie auf der Registerkarte Tools auf Debuggen klicken.

PHP Master | Debugging and Profiling PHP with Xdebug

Klicken Sie nach dem Öffnen der Quelldatei auf die Schaltfläche "Debuggen" in der Symbolleiste, um das Debuggen zu starten. Es wird die Anwendung im Browser geöffnet, und wenn die Option "Erstzeile stoppen" im Optionsfenster aktiviert wurde, wird die Ausführung von PHP in der ersten Zeile der Datei durchgeführt. Andernfalls läuft es, bis der erste Haltepunkt auftritt. Von dort aus können Sie die Schaltfläche Weiter mit dem nächsten Haltepunkt fortsetzen. Bitte beachten Sie, dass der Parameter xDebug_Session_Start in der Browser -URL -Leiste. Um den Debugger auszulösen, muss XDEBUG_Session_Start als Anforderungsparameter (GET/Post) oder xDebug_Session als Cookie -Parameter übergeben werden. Es gibt einige andere nützliche Operationen in der Debug -Symbolleiste. Sie sind:

  • Schritt für Schritt - Überspringen Sie die aktuell ausführende Zeile
  • Einschritt in die Funktion (für nicht gebaute Funktionen)
  • Einzelschritt-springen Sie aus der aktuellen Funktion

Sie können einen Haltepunkt hinzufügen, indem Sie auf die Zeilennummer im Editor -Rand klicken und anschließend die Ausführung am Haltepunkt pausieren. Sie können gelöscht werden, indem sie erneut klicken. Oder gehen Sie zum Fenster> Debugg> Breakpoints, in dem alle Haltepunkte im Programm aufgeführt sind. Sie können nur Breakpoints auswählen/deaktivieren, die Sie benötigen. Zur Laufzeit wird der Status der Variablen im aktuellen Bereich im Fenster Variablen angezeigt. Es werden die Werte lokaler Variablen und super globaler Variablen wie $_COOKIE, $_GET, $_POST, $_SERVER und

angezeigt. Sie können beobachten, wie sich ihre Werte ändern, wenn Sie die Anweisung durchlaufen.

PHP Master | Debugging and Profiling PHP with Xdebug

Leistungsanalyse

Leistungsanalyse ist der erste Schritt bei der Optimierung einer Anwendung. Leistungsanalyse -Tools zeichnen wichtige Details auf, z. B. die Zeit, die für Aussagen und Funktionen erforderlich ist, die Anzahl der Anrufe usw. Die Ausgabe kann analysiert werden, um zu verstehen, wo der Engpass liegt. XDEBUG kann auch als Leistungsanalyse -Tool für PHP verwendet werden. Fügen Sie die folgenden Einstellungen zu Php.ini hinzu:
<code>[xdebug]
zend_extension="/Applications/MAMP/bin/php5.2/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000</code>

Eigenschaftsanalyse wird standardmäßig in XDEBUG deaktiviert, sodass xdebug.profiler_enable verwendet wird, um sie zu aktivieren. xdebug.profiler_output_name ist der Dateiname des Leistungsanalysatorprotokolls (der %t -Plendierer findet den Zeitstempel zum Dateinamen an; siehe Dokumentation für eine vollständige Liste von Spezifikatoren). XDEBUG speichert die Leistungsanalyseausgabe im durch xdebug.profiler_output_dir angegebenen Verzeichnis. Sie können es in überall, wo Sie auswählen, ändern. Denken Sie jedoch daran, dass das Benutzerkonto, das das PHP -Skript ausführt, Schreibberechtigungen darauf haben muss. Die Leistungsanalyse kann die Leistung beeinträchtigen, da die PHP -Engine jeden Funktionsaufruf anzeigen und seine Details aufzeichnen muss, sodass Sie sie nicht ständig ausführen möchten. xdebug.profiler_enable_trigger weist xDebug an, die Leistungsanalyse nur durchzuführen, wenn xDebug_profile als GET- oder Post -Parameter übergeben wird. Die Größe der von XDebug erstellten Protokolldateien kann je nach Betrieb der Anwendung variieren. Außerdem ist es nicht wirklich einfach zu lesen. Sie müssen Programme wie Kcachegrind oder Webgrind verwenden, um sie anzuzeigen. KCacheGrind ist das KDE-Tool zur Datenvisualisierung von Leistungsanalyse, für das eine Unix-Umgebung ausgeführt werden muss, und Webgrind ist ein webbasiertes Tool. Das Öffnen der Leistungsanalyseprotokolldatei in KCacheGrind zeigt die Kosten für jeden Funktionsaufruf von Main () an. Das Folgende ist eine KCACHEGRIND Visualisierung der Leistungsanalyseausgabe der faktoriellen Funktion:

PHP Master | Debugging and Profiling PHP with Xdebug

Das linke Bedienfeld (Funktionsübersicht) zeigt die für jede Funktion aufgewendete Zeit in der Reihenfolge der Ausführung an. Das Feld in der oberen rechten Ecke zeigt die gleichen Informationen grafisch an, wobei die Größe den Kosten der Funktion entspricht. Anrufdiagramme stellen die Beziehung zwischen Funktionen in der Anwendung dar. In diesem Beispiel gibt es nur zwei Funktionen, main () und fact (). FACT () ist eine rekursive Funktion, die durch eine Schleife in der Abbildung dargestellt wird. Wenn Sie Ihren Code optimieren, sollten Sie den Bereich mit den höchsten Gesamtkosten suchen. Normalerweise ist der E/A -Betrieb der teuerste. Denken Sie daran, sie so weit wie möglich zu minimieren. Faules Laden von Dateien überall, überall aussagekräftig. Angenommen, Sie haben eine Klasse mit dem Namen Bestellungen, die Ihnen eine Liste aller Bestellungen und ihrer Details aus Ihrem Online -Shop erhalten.

<code>xdebug.profiler_enable = 1
xdebug.profiler_output_name = xdebug.out.%t
xdebug.profiler_output_dir = /tmp
xdebug.profiler_enable_trigger = 1</code>

Diese Klasse hat zwei Methoden: getAll () und getDetails (). Wenn Sie die GetAll () -Methode anrufen, werden alle Datensätze in der Bestellentabelle erhalten und sie durchlaufen, um die Details aller Datensätze zu erhalten. Schauen wir uns die Informationen zur Leistungsanalyse an.

PHP Master | Debugging and Profiling PHP with Xdebug

Obwohl absolute Zahlen keine Rolle spielen, da sie von den Plattform- und Laufzeitbedingungen abhängen, werden Sie die relativen Kosten verschiedener Funktionen verstehen. Beachten Sie, dass einige Funktionen Hunderte Male genannt werden (was natürlich schlecht ist). Der Code muss nicht alle Bestellungen durchlaufen und die Details jeder Bestellung separat abrufen. Lassen Sie uns die Funktion getAll () überschreiben, um Join zu verwenden.

<code class="language-php"><?php
class Orders
{
    protected $db;

    public function __construct(PDO $db) {
        $this->db = $db;
    }

    public function getAll() {
        $orders = array();
        $query = "SELECT * FROM orders";
        $result = $this->db->query($query);
        while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
            $row['details'] =
                $this->getDetails($row['orderId']);
            $orders[] = $row;
        }

        return $orders;
    }

    public function getDetails($orderId){
        $details = array();
        $result = $this->db->query("SELECT * FROM orderdetails WHERE orderId = " . $orderId);
        while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
            $details[] = $row;
        }
        return $details;
    }
}</code>

Leistungsanalyse führt jetzt zu besseren Ergebnissen, da die Anzahl der Abfragen verringert wird. Darüber hinaus ruft der Code die Funktion getDetails () nicht mehr auf.

PHP Master | Debugging and Profiling PHP with Xdebug

Zusammenfassung

xDebug fungiert als Vermittler und kontrolliert die Ausführung von PHP -Programmen auf dem Server. In diesem Artikel haben Sie zwei der beeindruckendsten Funktionen von XDEBUG -Unterstützung und Leistungsanalyseunterstützung gesehen. Mit dem Remote -Debugging können Sie die Werte zur Laufzeit überprüfen, ohne das Programm zu ändern, wodurch Sie besser verstehen, wie PHP ausgeführt wird. Die Leistungsanalyse identifiziert Engpässe in Ihrem Code, damit Sie diese für die Leistung optimieren können. Ich hoffe, dieser Artikel hilft Ihnen, die Vorteile von XDebug zu verstehen, und ermutigt Sie, ihn sofort zu verwenden (wenn Sie ihn noch nicht benutzt haben). Wenn Sie dies als wertvolles Instrument finden, möchten Sie möglicherweise sogar in Betracht ziehen, dieses großartige Projekt durch den Kauf einer Supportvereinbarung zu unterstützen.

(Bitte beachten Sie: Der obige Bildplatzhalter muss durch den tatsächlichen Screenshot ersetzt werden.)

Das obige ist der detaillierte Inhalt vonPHP Master | Debugging und Profiling PHP mit XDEBUG. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP Master | Einführung in das Gesetz des DemeterNächster Artikel:Keiner