eclipse phpstorm - Wie debugge ich PHP-Skripte?



xdebug remote (25)

Es gibt viele PHP-Debugging-Techniken, mit denen Sie unzählige Stunden beim Codieren sparen können. Eine effektive, aber grundlegende Debugging-Methode besteht darin, Fehlerberichte einfach zu aktivieren. Eine weitere, etwas fortschrittlichere Technik beinhaltet die Verwendung von Druckanweisungen, die helfen können, schwer fassbare Fehler zu lokalisieren, indem angezeigt wird, was tatsächlich auf den Bildschirm geht. PHPeclipse ist ein Eclipse-Plug-In, das häufige Syntaxfehler hervorhebt und zusammen mit einem Debugger Breakpoints setzen kann.

display_errors = Off
error_reporting = E_ALL 
display_errors = On

und auch benutzt

error_log();
console_log();

Wie debugge ich PHP- Skripte?

Ich kenne grundlegendes Debugging wie das Error Reporting. Das Breakpoint-Debugging in PHPEclipse ist ebenfalls sehr nützlich.

Was ist die beste (in Bezug auf schnell und einfach) Möglichkeit, in PHPStorm oder einer anderen IDE zu debuggen?


Für die wirklich grottenhaften Probleme, die zu zeitaufwendig wären, um print_r / echo zu verwenden, um herauszufinden, verwende ich die Debugging-Funktion meiner IDE (PhpEd). Im Gegensatz zu anderen IDEs, die ich verwendet habe, benötigt PhpEd ziemlich keine Einstellungen. Der einzige Grund, warum ich es nicht für irgendwelche Probleme benutze, ist, dass es schmerzhaft langsam ist. Ich bin mir nicht sicher, ob Langsamkeit spezifisch für PhpEd oder irgendeinen PHP-Debugger ist. PhpEd ist nicht kostenlos, aber ich glaube, es verwendet einen der Open-Source-Debugger (wie XDebug zuvor erwähnt) sowieso. Der Vorteil von PhpEd ist wiederum, dass es kein Setup benötigt, was ich in der Vergangenheit als ziemlich mühsam empfunden habe.


Ich benutze zend studio für Eclipse mit dem eingebauten Debugger. Es ist immer noch langsam im Vergleich zu Debugging mit Eclipse PDT mit Xdebug. Hoffentlich werden sie diese Probleme beheben, die Geschwindigkeit hat sich gegenüber den letzten Releases verbessert, aber das Überschreiten der Dinge dauert noch 2-3 Sekunden. Die Zend Firefox-Toolbar macht die Dinge wirklich einfach (debug nächste Seite, aktuelle Seite, etc.). Außerdem bietet es einen Profiler, der Ihren Code benchmarken und Tortendiagramme, Ausführungszeit usw. bereitstellen wird.


Die meisten Fehler lassen sich leicht finden, indem Sie einfach einige der wichtigsten Variablen var_dump , aber das hängt natürlich davon ab, welche Art von Anwendung Sie entwickeln.

Für komplexere Algorithmen sind die Step / Breakpoint / Watch Funktionen sehr hilfreich (wenn nicht notwendig)


Das manuelle Debuggen ist für mich im Allgemeinen schneller - var_dump() und debug_print_backtrace() sind alle Werkzeuge, mit denen Sie Ihre Logik rüsten können.


1) Ich benutze print_r (). In TextMate habe ich ein Snippet für 'pre', das zu diesem erweitert:

echo "<pre>";
print_r();
echo "</pre>";

2) Ich benutze Xdebug, war aber nicht in der Lage, die GUI direkt auf meinem Mac laufen zu lassen. Es druckt zumindest eine lesbare Version des Stack-Trace aus.


Nusphere ist auch ein guter Debugger für PHP nusphere



Nun, bis zu einem gewissen Grad hängt es davon ab, wo die Dinge nach Süden gehen. Das ist das erste, was ich versuche zu isolieren, und dann verwende ich echo / print_r () wie nötig.

NB: Ihr wisst, dass ihr als zweites Argument für print_r () wahr werden könnt und es die Ausgabe zurückgibt, anstatt es zu drucken? Z.B:

echo "<pre>".print_r($var, true)."</pre>";

Komodo IDE funktioniert gut mit xdebug, sogar für das Remore-Debugging. Es benötigt ein Minimum an Konfiguration. Alles, was Sie brauchen, ist eine Version von PHP, die Komodo lokal verwenden kann, um den Code eines Breakpoints zu durchlaufen. Wenn Sie das Skript in das Komodo-Projekt importiert haben, können Sie Haltepunkte mit einem Mausklick festlegen, wie Sie es zum Debuggen eines Java-Programms in Eclipse setzen würden. Remote-Debugging ist offensichtlich schwieriger, es richtig funktionieren zu lassen (Sie müssen möglicherweise die Remote-URL mit einem PHP-Skript in Ihrem Arbeitsbereich zuordnen) als eine lokale Debugging-Setup, die ziemlich einfach zu konfigurieren ist, wenn Sie auf einem MAC oder einem Linux-Desktop sind .


Ich verwende CakePHP oft, wenn Rails nicht möglich ist. Um Fehler zu finden, error.log ich normalerweise die error.log im Ordner tmp und error.log sie im Terminal mit dem Befehl ...

tail -f app/tmp/logs/error.log

Es gibt dir einen Dialog von Kuchen von dem, was vor sich geht, was ziemlich praktisch ist, wenn du etwas Midcode ausgeben willst, den du benutzen kannst.

$this->log('xxxx');

Dies kann Ihnen normalerweise eine gute Vorstellung davon geben, was vor sich geht / was falsch ist.


Versuchen Sie Eclipse PDT, um eine Eclipse-Umgebung einzurichten, die Debugging-Funktionen wie Sie erwähnt haben. Die Möglichkeit, in den Code zu gehen, ist ein viel besserer Weg, um die alte Methode von var_dump zu debuggen und an verschiedenen Stellen zu drucken, um zu sehen, wo Ihr Fluss schief läuft. Wenn alles andere fehlschlägt und alles, was ich habe, ist SSH und vim, var_dump() ich immer noch nach var_dump() / die() um herauszufinden, wo der Code nach Süden geht.


Xdebug und das DBGp-Plugin für Notepad ++ für schwere Bugjagd, FirePHP für leichte Sachen. Schnell und dreckig? Nichts schlägt dBug .


Xdebug , von Derick Rethans, ist sehr gut. Ich habe es vor einiger Zeit benutzt und fand es nicht so einfach zu installieren. Sobald Sie fertig sind, werden Sie nicht verstehen, wie Sie ohne es geschafft haben :-)

Es gibt einen guten Artikel über Zend Developer Zone (die Installation unter Linux scheint nicht einfacher) und sogar ein Firefox-Plugin , das ich nie benutzt habe.


Die Ausgabepufferung ist sehr nützlich, wenn Sie Ihre Ausgabe nicht durcheinander bringen wollen. Ich mache das in einem Einzeiler, den ich nach Belieben kommentieren kann

 ob_start();var_dump(); user_error(ob_get_contents()); ob_get_clean();

In einer Produktionsumgebung protokolliere ich relevante Daten mit error_log () im Fehlerprotokoll des Servers.


Je nach Problem mag ich eine Kombination von error_reporting (E_ALL) gemischt mit Echo-Tests (um die Zeile / Datei zu finden, in der der Fehler anfänglich aufgetreten ist; Sie wissen, dass nicht immer die Zeile / Datei php richtig ist?), IDE brace matching (um "Parse error: syntax error, unerwartete $ end" Probleme), und print_r (); Ausfahrt; Dumps (echte Programmierer sehen die Quelle; p).

Du kannst phpdebug (check sourceforge) auch nicht mit "memory_get_usage ();" und "memory_get_peak_usage ();" um die Problembereiche zu finden.


Dies ist meine kleine Debug-Umgebung:

error_reporting(-1);
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_BAIL, 0);
assert_options(ASSERT_QUIET_EVAL, 0);
assert_options(ASSERT_CALLBACK, 'assert_callcack');
set_error_handler('error_handler');
set_exception_handler('exception_handler');
register_shutdown_function('shutdown_handler');

function assert_callcack($file, $line, $message) {
    throw new Customizable_Exception($message, null, $file, $line);
}

function error_handler($errno, $error, $file, $line, $vars) {
    if ($errno === 0 || ($errno & error_reporting()) === 0) {
        return;
    }

    throw new Customizable_Exception($error, $errno, $file, $line);
}

function exception_handler(Exception $e) {
    // Do what ever!
    echo '<pre>', print_r($e, true), '</pre>';
    exit;
}

function shutdown_handler() {
    try {
        if (null !== $error = error_get_last()) {
            throw new Customizable_Exception($error['message'], $error['type'], $error['file'], $error['line']);
        }
    } catch (Exception $e) {
        exception_handler($e);
    }
}

class Customizable_Exception extends Exception {
    public function __construct($message = null, $code = null, $file = null, $line = null) {
        if ($code === null) {
            parent::__construct($message);
        } else {
            parent::__construct($message, $code);
        }
        if ($file !== null) {
            $this->file = $file;
        }
        if ($line !== null) {
            $this->line = $line;
        }
    }
}

PhpEdit hat einen eingebauten Debugger, aber normalerweise benutze ich echo (); und print_r (); der altmodische Weg !!


Ich benutze Netbeans mit XDebug und dem Easy XDebug FireFox Add-on

Das Add-On ist essentiell, wenn Sie MVC-Projekte debuggen, da die normale Ausführung von XDebug in Netbeans darin besteht, die dbug-Sitzung über die URL zu registrieren. Wenn das Add-on in FireFox installiert ist, würden Sie die Netbeans-Projekteigenschaften festlegen -> Konfiguration ausführen -> Erweitert und wählen Sie "Webbrowser nicht öffnen" Sie können jetzt Ihre Breakpoints setzen und die Debugging-Sitzung wie gewohnt mit Strg-F5 starten . Öffnen Sie FireFox und klicken Sie mit der rechten Maustaste auf das Add-On-Symbol in der rechten unteren Ecke, um mit der Überwachung von Haltepunkten zu beginnen. Wenn der Code den Haltepunkt erreicht, wird er angehalten und Sie können Ihre variablen Zustände und den Call-Stack überprüfen.


PhpEd ist wirklich gut. Sie können in / über / aus Funktionen treten. Sie können Ad-hoc-Code ausführen, Variablen prüfen und Variablen ändern. Es ist erstaunlich.


print_r (debug_backtrace ());

oder etwas ähnliches :-)


XDebug ist essentiell für die Entwicklung. Ich installiere es vor jeder anderen Erweiterung. Es gibt Ihnen bei jedem Fehler Stack-Spuren und Sie können Profiling leicht aktivieren.

Verwenden Sie var_dump() für einen schnellen var_dump() über eine Datenstruktur. Verwenden Sie print_r() da Sie es mit <pre> und es nur jeweils eine var- print_r() .

<?php var_dump(__FILE__, __LINE__, $_REQUEST); ?>

Für eine echte Debugging-Umgebung ist das Beste, was ich gefunden habe, Komodo IDE, aber es kostet $$.


Die integrierten Debugger, in denen Sie die Werte der Variablen ändern können, während Sie durch den Code gehen, sind wirklich cool. Sie erfordern jedoch Software-Setup auf dem Server und eine bestimmte Menge an Konfiguration auf dem Client. Beide erfordern regelmäßige Wartung, um in einem guten Betriebszustand zu bleiben.

Ein print_r ist einfach zu schreiben und funktioniert garantiert in jedem Setup.


Wenn ein Zertifikat mitten im Debugging des Projekts abläuft, müssen Sie eine manuelle Deinstallation durchführen :

Bitte führen Sie adb uninstall <package_name> in einer Shell aus.





php eclipse debugging phpstorm xdebug