Überprüfen Sie, ob xdebug funktioniert

84

Ist es ohne Installation eines Texteditors oder einer IDE möglich zu testen, ob xdebug funktioniert, dh ob es PHP-Code debuggen kann?

Der einzige Teil, den xdebug in phpinfo () enthält, ist der folgende:

Zusätzliche INI-Dateien analysierten /etc/php5/apache2/conf.d/mysql.ini, /etc/php5/apache2/conf.d/mysqli.ini, /etc/php5/apache2/conf.d/pdo.ini, /etc/php5/apache2/conf.d/pdo_mysql.ini, /etc/php5/apache2/conf.d/xdebug.ini

Es wird in der phpinfo () nirgendwo anders erwähnt.

oshirowanen
quelle
7
Wird phpinfo()es als geladene Erweiterung gemeldet? Ist es das, was du mit "arbeiten" meinst?
Wiseguy
2
Wenn es auf Ihrer phpinfo () angezeigt wird, können Sie versuchen, auf dem Xdebugs-Port (der standardmäßig 9000 ist) zu
telneten
@ Wiseguy, ich habe die Frage aktualisiert. Bedeutet das, dass es geladen ist / richtig funktioniert?
oshirowanen
@ tix3, ich habe die Frage aktualisiert. Bedeutet das, dass es geladen ist / richtig funktioniert?
oshirowanen
2
Wenn die Erweiterung tatsächlich geladen ist, sollte sie einen eigenen Abschnitt haben, in dem die Konfigurationsanweisungen aufgeführt sind.
Wiseguy

Antworten:

92

Ohne ein Debugging durchzuführen, können Sie sicher nicht sicher sein, dass ein Debugger funktioniert.

Aber Sie können ziemlich sicher sein - ich denke, man sollte davon ausgehen, dass alles funktionieren würde, wenn einige Aspekte von xDebug funktionieren.

Vor diesem Hintergrund können Sie bestätigen, dass xDebug installiert und installiert ist, indem Sie Folgendes versuchen:

1) phpinfo()- Dies zeigt Ihnen alle geladenen Erweiterungen, einschließlich xDebug. Wenn es da ist, ist es eine sichere Wette, dass es funktioniert.

2) Wenn Ihnen das nicht gut genug ist, können Sie versuchen, die var_dump()Funktion zu verwenden. xDebug ändert die Ausgabe von var_dump(), um zusätzliche Informationen einzuschließen . Wenn dies vorhanden ist, funktioniert xDebug.

3) xDebug ändert die Fehlerausgabe von PHP. Wenn Ihr Programm mit xDebug abstürzt, erhalten Sie mehr Informationen über den Fehler als mit der Standard-PHP-Absturzausgabe.

4) xDebug fügt PHP auch eine Reihe von Hilfsfunktionen hinzu. Sie können jedes dieser Verfahren ausprobieren, um festzustellen, ob es funktioniert. Beispielsweise sollte die Funktion xdebug_get_code_coverage()vorhanden sein und ein Array zurückgeben. Wenn dies der Fall ist, wird xDebug installiert. Wenn nicht, ist es nicht.

Spudley
quelle
1
phpinfo () erwähnt nur xdebug in Additional .ini files parsed. Überprüfen Sie jetzt den Rest Ihrer Vorschläge.
oshirowanen
3
Nur versucht xdebug_get_code_coverage()und ich bekomme Fatal error: Call to undefined function xdebug_get_code_coverage() in /var/www/xdebug.php on line 5.
oshirowanen
7
Fair genug. Das sagt Ihnen ziemlich schlüssig, dass xdebug nicht richtig installiert ist.
Spudley
3
Nur zu Ihrer /etc/php/conf.d/xdebug.iniInformation, wenn dies der Fall ist, sollten Sie Ihre Datei öffnen , die in zusätzlichen analysierten INI-Dateien erwähnt wird, und alle darin enthaltenen Zeilen auskommentieren. zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp
Tony Morello
@TonyMorello Ich denke, das hat mir geholfen, weil meine php.ini korrekt mit dem vollständigen Pfad eingerichtet wurde, aber in Debian gibt es auch ein /mods-availableVerzeichnis und diese xdebug.ini-Einstellung stand (glaube ich) in Konflikt mit meiner php.ini-Einstellung.
PJ Brunet
67

Lauf

php -m -c

in Ihrem Terminal, und suchen Sie dann nach [Zend Modules]. Es sollte irgendwo da sein, wenn es geladen ist!

NB

Wenn Sie Ubuntu verwenden, wird es hier möglicherweise nicht angezeigt, da Sie die xdebug-Einstellungen von /etc/php5/apache2/php.iniin hinzufügen müssen /etc/php5/cli/php.ini. Meine sind

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
Luke Madhanga
quelle
17
php --versionlistet auch mit Xdebug auf, wenn es geladen ist
mfink
1
@mfink php --versionfunktioniert bei mir nicht. Unmittelbar nach dem Start meines Computers, nachdem Apache gestartet wurde und funktioniert, php --versionwird phpinfo()Xdebug angezeigt , jedoch kein Xdebug-Abschnitt. Die Ausführung von PHP-Skripten stoppt nicht an Haltepunkten. Nachdem ich laufen service apache2 restart, phpinfo()zeigt die xdebug Abschnitt und Debugging funktioniert. Aus irgendeinem Grund wird xdebug nicht geladen, wenn Apache während des Maschinenstarts gestartet wird. Im Moment muss ich Apache nach jedem Start neu starten.
Buttle Butkus
36

Versuchen Sie Folgendes, sollte "existiert" oder "nicht existiert" zurückgegeben werden:

<?php
echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';
KsaR
quelle
25

Nach einem bitteren, fast 24-stündigen Versuch, xdebug für Netbeans 8.0.2 zum Laufen zu bringen, habe ich eine Lösung gefunden, die hoffentlich für alle Ubuntu- und Ubuntu-bezogenen Stacks funktioniert.

Problem Nummer 1: PHP- und xdebug-Versionen müssen kompatibel sein

Wenn Sie ein Linux-Setup ausführen und apt-get zur Installation von xdebug verwenden, erhalten Sie manchmal nicht die richtige xdebug-Version. In meinem Fall hatte ich die neueste PHP-Version, aber eine alte XDEBUG-Version. Das muss an meiner aktuellen Xubuntu-Version liegen. Softwareversionen sind abhängig von Repositorys, die von der Betriebssystemversion abhängen, die Sie ausführen.

Lösung: PHP hat einen ordentlichen Erweiterungsmanager namens PECL. Befolgen Sie die hier gegebenen Anweisungen , um es in Betrieb zu nehmen. Zunächst sollten Sie, wie von einem Mitglied in den Kommentaren hervorgehoben, das PHP-Entwicklerpaket installieren, damit PECL funktioniert:

sudo apt-get install php5-dev

Mit PECL können Sie dann die neueste stabile Version von xdebug installieren:

sudo pecl install php5-xdebug

Sobald Sie dies tun, wird die richtige Version von xdebug installiert, aber nicht einsatzbereit. Danach müssen Sie es aktivieren. Ich habe viele Vorschläge dazu gesehen, aber Tatsache ist, dass PHP einige Module benötigt, um sowohl für den Client als auch für den Server aktiviert zu werden, in diesem Fall Apache. Es scheint, dass die beste Vorgehensweise darin besteht, die integrierte Methode zum Aktivieren von Modulen namens php5enmod zu verwenden. Die Verwendung wird hier beschrieben .

Problem Nummer 2: Aktivieren Sie das Modul korrekt

Zuerst müssen Sie in den Ordner / etc / php5 gehen. Dort finden Sie 3 Ordner, apache2, cli und mods_available. Der Ordner mods_available enthält Textdateien mit Anweisungen zum Aktivieren eines bestimmten Moduls. Die Namenskonvention lautet [module] .ini. Werfen Sie einen Blick in einige von ihnen und sehen Sie, wie sie eingerichtet sind.

Jetzt müssen Sie Ihre INI-Datei im Ordner mods_available erstellen. Erstellen Sie eine Datei mit dem Namen xdebug.ini und fügen Sie diese in die Datei ein:

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

Stellen Sie sicher, dass die Direktive [xdebug] genau wie im obigen Beispiel vorhanden ist. Das Modul muss unbedingt funktionieren. Kopieren Sie einfach den gesamten Code und fügen Sie ihn ein. Auf diese Weise werden Sie glücklicher. : D.

Hinweis: Der Pfad zend_extension ist sehr wichtig. In diesem Beispiel zeigt es auf die aktuelle Version der PHP-Engine, aber Sie sollten zuerst zu / usr / lib / php5 gehen und sicherstellen, dass der Ordner mit den Namen der richtige ist. Passen Sie den Namen an das an, was Sie dort sehen, und überprüfen Sie, während Sie gerade dabei sind, im Ordner, ob die Datei xdebug.so wirklich vorhanden ist. Es sollte sein, wenn Sie alles richtig gemacht haben.

Nachdem Sie Ihre xdebug.ini erstellt haben, ist es Zeit, das Modul zu aktivieren. Öffnen Sie dazu eine Konsole und geben Sie Folgendes ein:

php5enmod xdebug

Wenn alles richtig lief, erstellte PHP zwei Links zu dieser Datei, einen in /etc/php5/apache2/conf.d und einen in /etc/php5/cli/conf.d

Starten Sie Ihren Apache-Server neu und geben Sie dies in die Konsole ein:

php -v

Sie sollten so etwas bekommen:

PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.3.1, Copyright (c) 2002-2015, by Derick Rethans

Dies bedeutet, dass der PHP-Client Ihre Datei xdebug.ini gelesen und das Modul xdebug.so geladen hat. So weit, ist es gut.

Erstellen Sie nun irgendwo auf Ihrem Webserver ein phpinfo-Skript und führen Sie es aus. Das sollten Sie sehen, wenn alles schief gelaufen ist:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie dies sehen, hat Apache auch das Modul geladen, und Sie sind wahrscheinlich bereit zu gehen. Nun wollen wir sehen, ob Netbeans korrekt debuggt. Erstellen Sie ein sehr einfaches Skript, fügen Sie einige Variablen hinzu, geben Sie ihnen Werte und legen Sie einen Haltepunkt fest. Drücken Sie nun STRG + F5, klicken Sie in Ihrem Debugger-Bereich auf "Einsteigen" und prüfen Sie, ob Sie Folgendes erhalten:

xdebug in Aktion

Denken Sie daran, die Netbeans-Konfiguration für das Debuggen unter tools / options / php zu überprüfen. Es sollte ungefähr so ​​aussehen:

Debuggen von Konfigurationen in Netbeans

Ich hoffe, dies wirft ein Licht auf dieses eher dunkle, verwirrende Problem.

Die besten Wünsche!

Théo T. Carranza
quelle
2
hat für mich funktioniert, diese Antwort sollte wahrscheinlich auf xdebug oder netbeans Seite sein
Southton
1
Ich musste das Entwicklerpaket von PHP installieren, damit PECL funktioniert : sudo apt-get install php5-dev.
Bis
Auch php5enmoderstellt keine Links in INI-Dateien, es funktioniert ordentlich ohne.
Bis
1
Noch etwas: Die [xdebug]Direktive in der INI-Datei ist entscheidend, damit sie funktioniert. Ich war verwirrt darüber, dass in der ursprünglichen INI-Datei das [xdebug]fehlte, aber für mich funktionierte es nicht ohne.
Bis
Hallo! Sie haben Recht mit der Installation des PHP-Entwicklerpakets. Ich werde den Beitrag entsprechend aktualisieren. Ich bin mir nicht sicher über deinen Kommentar zum php5enmod du. Es werden die Links zu den von mir angegebenen Ordnern erstellt. Und ja, die [xdebug] -Richtlinie ist unerlässlich. Ich werde den Beitrag aktualisieren, um dies ebenfalls widerzuspiegeln. Danke für die Rückmeldung!
Théo T. Carranza
9

Nur um die Antwort von KsaR zu erweitern und die Möglichkeit zu bieten, xdebug über die Befehlszeile zu überprüfen:

php -r "echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';"
Gulaschsuppe
quelle
6

Sie können diesen kleinen phpCode ausführen

<?php
phpinfo();
?>

Kopieren Sie die gesamte Ausgabeseite und fügen Sie sie in diesen Link ein . Dann analysieren. Es wird angezeigt, ob Xdebug installiert ist oder nicht. Außerdem werden Anweisungen zum Abschluss der Installation gegeben.

cmb28
quelle
3

Wenn Sie Eclipse verwenden , beachten Sie bitte, dass während der Ausführung im XDebug-Modus die magische Konstante __FILE__ immer wie folgt ausgewertet wird:

xdebug://debug-eval

Die folgende Prüfung gibt also true zurück, wenn sich Ihre Sitzung unter XDebug befindet:

$is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug
Eugen Mihailescu
quelle
2

In Ihrer Frage haben Sie erwähnt, dass in Ihrer phpinfo angegeben wurde, dass Apache die Konfiguration von xdebug in /etc/php5/apache2/conf.d/xdebug.ini lädt. In vielen Online-Anweisungen werden Sie möglicherweise darauf hingewiesen, dass Sie aufgefordert werden, die xdebug-Konfiguration in php einzufügen .ini (und das habe ich auch getan) Wenn die Konfiguration jedoch auf /etc/php5/apache2/conf.d/xdebug.ini festgelegt ist, sollten Sie die Konfigurationseinstellungen von [XDebug] aus / etc / php5 / apache2 entfernen /php.ini und fügen Sie es STATT in /etc/php5/apache2/conf.d/xdebug.ini ein. Nachdem ich /etc/php5/apache2/php.ini entfernt und stattdessen /etc/php5/apache2/conf.d/xdebug.ini eingegeben und Apache neu gestartet hatte, funktionierte es !!

Geben Sie daher in Ihre Datei /etc/php5/apache2/conf.d/xdebug.ini Folgendes ein:

[XDebug]
zend_extension="/usr/lib/php5/20121212+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/home/paul/tmp"

xdebug.remote_host="localhost"
xdebug.remote_handler="dbgp";
xdebug.idekey="phpstorm_xdebug"

Entfernen Sie dies dann aus der Datei /etc/php5/apache2/php.ini, wenn Sie es ebenfalls dort ablegen.

Dann mach:

sudo service apache2 neu starten

Dann sollte es funktionieren !!!

Paul Preibisch
quelle
0

Ab xdebug 3 können Sie die folgende Befehlszeile verwenden:

php -r "xdebug_info();"

Außerdem werden nützliche Informationen zu Ihrer xdebug-Installation angezeigt.

Renrhaf
quelle