Wie debuggen Sie Plugins?


49

Ich bin ziemlich neu im Plugin-Authoring und hatte Probleme beim Debuggen.

Ich habe viel Echo benutzt und es ist schlampig und hässlich.

Ich bin sicher, es gibt einen besseren Weg, dies zu tun, vielleicht eine IDE mit einem Debugger, mit dem ich die gesamte Site einschließlich des Plugins ausführen kann.


1
Ich habe keine IDE gesehen, die WordPress vollständig in der IDE ausführt ... obwohl das fantastisch wäre. Ich debugge Plug-Ins, indem ich WAMP lokal und Code in Dreamweaver ausführe. Wenn Sie WP_DEBUG, wie von John empfohlen, auf "false" setzen, erhalten Sie eine ziemlich gute Vorstellung davon, was in Ihren Skripten, wenn überhaupt, schief läuft. Anschließend können Sie in Dreamweaver bearbeiten, Strg + S und dann F5 im Browser drücken, um die Änderungen sofort anzuzeigen.
EAMann

1
@EAMann - Achten Sie darauf, sowohl PhpEd (für Windows) als auch PhpStorm + XDEBUG (für Mac, Linux und Windows) zu testen.
MikeSchinkel

Antworten:


21

Gehe in die wp-config.php und wechsle define('WP_DEBUG', false);zu define('WP_DEBUG', true);. Installieren Sie auch Andrew Nacins Plugin " Log Deprecated Notices" .


12
Ich würde auch Nacins anderen Artikel lesen
kevtrout

Ab PHP 5.4 werden Sie wahrscheinlich mit E_STRICT-Hinweisen überschwemmt. Drop diesen Kern in den Plugins Ordner und aktivieren Strict Hinweise zu entfernen, deaktivieren zu Ihrem normalen Dienst zurückzukehren.
webaware

12

Wenn Fehler ausgegeben werden, ist x-debug eine brillante PHP-Erweiterung, die PHP moderne Backtraces hinzufügt.

Wenn Sie versuchen, herauszufinden, was los ist, wenn keine Fehler vorliegen, besteht mein bevorzugter Ansatz darin, eine Funktion zu definieren, die die Ausgabe in einer Datei protokolliert. Also plog ich ($ variable) und das erscheint in der Logdatei, die ich dann untersuchen kann. Dies ist besonders nützlich, wenn Sie herausfinden möchten, was passiert ist, bevor header () aufgerufen wird, oder wenn Sie nicht in STDOUT drucken können.


10

Verwenden Sie xdebug + NetBeans IDE. Bei vollständiger Konfiguration - was einfach zu tun ist - können Sie Haltepunkte in Ihrem Plugin setzen und Variablen an den Haltepunkten beobachten. Ich denke, es ist der beste Weg, um Plugins oder PHP-Anwendungen für diese Angelegenheit zu debuggen.


6

Ich debugge die altmodische Art error_log()und Weise, ing und var_dumping. Ich bin der Meinung, dass dies der effizienteste Weg für mich ist. Ich habe ein paar Wrapper-Funktionen, um mit verschiedenen Arten von Daten error_logumzugehen , da Arrays und Objekte sehr schmerzhaft sein können. Die Verwendung von print_r()in kann außerdem schwierig sein, zu lesen, wenn es sich nicht in a befindet <pre>. Ich habe tj_log()für die Fehlerprotokollierung und tj()zum Anzeigen der Ausgabe (die im Grunde jeden Datentyp in einer anzeigbaren Weise zeigt:

function tj( $code ) {

    ?>
    <style>
        .tj_debug { word-wrap: break-word; white-space: pre; text-align: left; position: relative; background-color: rgba(0, 0, 0, 0.8); font-size: 11px; color: #a1a1a1; margin: 10px; padding: 10px; margin: 0 auto; width: 80%; overflow: auto; -moz-box-shadow:0 10px 40px rgba(0, 0, 0, 0.75); -webkit-box-shadow:0 10px 40px rgba(0, 0, 0, 0.75); -moz-border-radius: 5px; -webkit-border-radius: 5px; text-shadow: none; }
    </style>
    <br /><pre class="tj_debug">

    <?php
    if ( is_null( $code ) || is_string($code) || is_int( $code ) || is_bool($code) || is_float( $code ) ) :
        var_dump( $code );

    else :
        print_r( $code );

    endif;

    echo '</pre><br />';

}

function tj_log( $code ) {

    if ( is_null( $code ) || is_string($code) || is_int( $code ) || is_bool($code) || is_float( $code ) ) :
        $code = var_export( $code, true );

    else :
        $code = print_r( $code, true );

    endif;

    error_log( $code );

}

Also mache ich einfach: tj( $current_user );oder was auch immer.


5

Nachdem ich an einer Reihe von IDEs herumgebastelt hatte, entschied ich mich für einfaches altes Notepad ++ mit einem ultra-angepassten Syntax-Hervorhebungs-Farbschema.

Ich habe ein Makro so eingerichtet, dass wenn ich Shift-Ctrl-X drücke, der folgende Code dort ausgegeben wird, wo sich mein Cursor befindet:

echo "<pre>";
var_dump($);
echo "</pre>";
exit();

Es ist einfach, aber ich kann im Allgemeinen 90% meiner Fehler mit diesem Makro und aktiviertem WP_DEBUG aufspüren.


2
Schöner Zug. Tastatur-Hotkeys in Editoren rocken!
Hakre

1
Ich bevorzuge die Ausgabe von print_r($var, true)statt var_dump.
Brasofilo

5

Ich habe eine kleine Klasse geschrieben, um ein Logfile zu erstellen. Dies ist sehr nützlich, wenn Sie Ajax-Aufrufe debuggen.

http://github.com/hunk/Magic-Fields/blob/master/tools/debug.php

Sie müssen nur Folgendes tun:

Debug :: log ("Dies ist eine Debug-Meldung");

Wenn diese Zeile ausgeführt wird, wird eine Nachricht in die Protokolldatei eingefügt. Anschließend können Sie den Befehl tail verwenden (wenn Sie ein Betriebssystem im Unix-Stil verwenden).

tail -f mylogfile.log

Wenn Sie dieser Funktion auch ein Array oder ein Objekt übergeben können.

Beachten Sie , dass Sie die Zeile 20 für einen Pfad ändern müssen, in dem Sie Ihre Protokolldatei speichern möchten


3

Ich benutze Aptane IDE unter Linux und UltraEdit unter Windows, und dieses hat auch einen PHP-Parser. Außerdem zeige ich alle Hinweise von xDebug mit der in WP_DEBUGdefinierten Konstante an wp-config.php.

Sehen Sie sich auch meinen Beitrag zu diesem Thema an, und freuen Sie sich über Kommentare und Feedback zu Ihren Entwicklungstools.


2

Ich empfehle dir FirePHP . Sie können Debug-Informationen über HTTP-Header an Firefoxs Firebug senden, was in der Regel zu einer saubereren Debug-Ausgabe führt.



1

Es gibt zwei IDEs, die ich empfehlen kann, und ich habe beide ausgiebig verwendet: PhpED (nur Windows) und PhpStorm + XDEBUG (Mac, Windows und Linux). Ich bin jetzt auf dem Mac und kann nur letzteres verwenden.

Beide ROCK! Die gute Nachricht ist, dass PhpStorm vor September 2010 49 US-Dollar und danach nur noch 99 US-Dollar kostet. Wenn ich unter Windows wäre und erneut wählen müsste, bin ich mir nicht sicher, welche ich wählen würde.

Ehrlich gesagt kann ich nicht anders, als das Gefühl zu haben, dass jeder Plugin-Entwickler, der keines dieser beiden Tools verwendet, schwerwiegende Behinderungen hat, insbesondere, wenn er noch relativ neu in der Entwicklung von WordPress-Plugins ist.


1

Krumo - die gestylte PHP-Debug-Klasse

Eine andere wirklich schöne Sache ist die "krumo" PHP-Klasse. Es ist in einer halben Minute implementiert und bietet eine einfache Möglichkeit, alle Arten von Variablen zu debuggen:

  • Gegenstände,
  • Arrays,
  • strings / float / integer / etc.

Außerdem hilft es beim Zurückverfolgen, zeigt geladene Klassen oder eingeschlossene Dateien und alles auf Anfrage.

Plus es ist KOSTENLOS!

Herunterladen

Krumo @sourceforge


0

Ich verwende ein 13-Dollar-Plugin namens LogPress, das Sie bei ThemeForest kaufen können, und es ist ein absolutes Geschenk Gottes. Sie können alles bezüglich der Plugins und der Site debuggen. Unterstützt die Protokollierung von Firebug-Konsolen und vieles mehr. Ich kann nicht ohne leben, so oft benutze ich dieses Plugin.

Dieses Plugin ist wahrscheinlich das beste Geld, das ich je ausgegeben habe und es hat unzählige Stunden in meiner Wordpress-Plugin-Entwicklung gespart.


Wow, ich wurde abgelehnt, weil ich ein kostenpflichtiges Plugin empfohlen habe, mit dem ich überhaupt keine Verbindung habe. Das ist doch ein bisschen hartnäckig, oder?
Dwayne Charrington

Ich bin nicht derjenige, der abstimmt, aber ich bin nicht überrascht. Sie verwenden Wörter, als wollten Sie das Plugin verkaufen. Dinge zu empfehlen ist in Ordnung, aber hart zu verkaufen wie "absolut gottgesandt". Die Leute hassen Werbung. Verringern Sie einfach die Sprache und die Empfehlung wird für sich selbst sprechen.
ICC97

0

Ich verwende phpED und xdebug, aber für mich (und anscheinend für jemanden anderen) ist es unmöglich, die Plugins oder die Datei des Themas zu debuggen! Der Debugger stoppt nur an den Haltepunkten, die sich in den Haupt- oder Original- "Kern" -Dateien befinden! kann mir jemand helfen?


0

Erstens füge ich define('WP_DEBUG', false);der wp-config.php-Datei (wie die meisten Leute gesagt haben) meine lokale Installation hinzu, bei der es sich um eine aktuelle Kopie einer relevanten Produktionsstätte handelt (sowohl Dateien als auch Daten). Dies macht Dinge schnell, sicher und getrennt, spiegelt aber gut mindestens einen Ort wider, an dem das Plugin tatsächlich verwendet wird.

Ich füge auch das Debug-Leisten- Plugin zusammen mit einigen der Debug-Leisten-Add-Ons (z. B. Transients) hinzu - entsprechend Ihren Plugins.

Ich verwende auch das Firebug-Add-on für Firefox, das sich hervorragend dazu eignet, HTML-, CSS- und JavaScript-Probleme aufzuspüren und sich auch mit der Unheimlichkeit des Layouts zu befassen.

Ich codiere mit UltraEdit, das ich seit mehr als 15 Jahren für eine ganze Reihe von Codierungen (PHP bis SQL) bei der Arbeit und zu Hause verwendet habe. Das funktioniert gut für mich, aber ich habe möglicherweise nicht genug, um es als IDE zu bewerten viele Leute. Es verfügt über Syntaxhervorhebungs-, automatische Vervollständigungs- und Code-Layout-Funktionen sowie eine Reihe von HTML- und CSS-Verknüpfungswerkzeugen, mit denen Tippfehler vermieden werden können. Meistens bringt mir dies Vertrautheit, was ein wichtiger Aspekt ist, der in der Eile zum Neuen oft übersehen wird. Das Muskelgedächtnis unterstützt die Wiederholbarkeit auch bei der Codierung.

Und natürlich habe ich normalerweise eine geeignete Seite aus dem Codex in einem anderen Tab auf einem geeigneten Exemplar geöffnet.

Dies alles hilft auf unterschiedliche Weise, Codierungs-, Analyse-, Funktions- und Layoutfehler hervorzuheben, und beeinträchtigt nicht viel, wie ich codiere oder ob nichts falsch ist. Die meisten können für eine Weile ignoriert oder deaktiviert werden, wenn Sie experimentieren oder an etwas arbeiten, das Sie später noch einmal überprüfen werden.

Oh, und es ist nichts falsch an einem gut positionierten Echo oder print_r, um etwas an einer Taste zu überprüfen (solange Sie sie entfernen, wenn Sie fertig sind).



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.