Felsöka xdebug

xdebugI och med att jag uppgraderade till PHP 7.0 var jag också tvungen att uppgradera till xdebug 2.4. Det var inga problem i Ubuntu 16.04 men när jag gjorde uppgraderingen i OSX 10.11.5 då gick något snett.
Det finns många bra guider på nätet för att uppgradera till PHP 7.0 och xdebug, till exempel den här.

Den här artikeln är uppdaterad 2017-05-13 efter att jag åter fått felsöka xdebug i MacOS.

Så om det nu går fel med xdebug, hur ska man felsöka?

Vagrant

Om du kör en lokal webbserver så ska kommandona nedan köras i ditt lokala terminalfönster.
Om du kör en Vagrant box så ska du köra kommandot i boxen. (vagrant ssh och sedan kommandot).

php -m -c

Listar alla plugins som php känner igen. Här bör du se xdebug i listan och även en gång till under Zend.

telnet 127.0.0.1 9000

Du kan testa om något svarar på porten som xdebug använder.

Får du en förbindelse så är något fel:

telnet 127.0.0.1 9000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

(Avsluta telnet med CTRL + ] och skriv sedan quit)

Får du däremot ingen förbindelse då är det rätt:

telnet 127.0.0.1 9000
Trying 127.0.0.1…
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host

phpinfo()

Skapa filen phpinfo.php med detta unnehåll:

<?php phpinfo(); ?>

Kör filen i webbläsaren:

127.0.0.1/phpinfo.php

Du ska nu se information om PHP, sök efter xdebug.

Filen: xdebug.ini

Titta i phpinfo vad sökvägen är till xdebug.ini
sudo nano /usr/local/etc/php/7.0/conf.d/ext-xdebug.ini
Filen bör innehålla följande:

[xdebug]
zend_extension="/usr/local/opt/php70-xdebug/xdebug.so"
xdebug.default_enable=1
xdebug.remote_enable = 1
xdebug.remote_handler = dbgp
xdebug.remote_host = localhost
xdebug.remote_port = 9000
xdebug.remote_autostart=1
xdebug.idekey="netbeans-xdebug"
xdebug.remote_mode=req

I mitt fall får jag ett svar från port 9000 så jag använder 9001 istället.
Kontrollera att inställningarna i din fil också syns i phpinfo.

Logga xdebug

I filen xdebug.ini kan du temporärt lägga in en loggning för att se vad som händer.
Med loggfilen kan du avgöra om xdebug får någon förfrågan och om den skickar något svar.

xdebug.remote_log = /tmp/xdebug.log

Kontrollera att inställningarna i din fil också syns i phpinfo efter att du startat om webbservern. (Se nästa rubrik hur du gör det).
Nu kan du skriva:

tail -f /tmp/xdebug.log

Då ska du kunna se vad som händer i loggfilen i realtid.

Kommentera ut (sätt en # på vänster sida) loggningen när du inte behöver den för loggning tar lite extra tid och fyller din hårddisk i onödan.
Du kan radera loggen när du är klar med den.

Starta om webbservern

När du gör ändringar i ini-filer måste du starta om webbservern apache eller nginx.

sudo apachectl -k restart
/etc/init.d/nginx restart
service nginx restart

Brandväggen

Om du har aktiverat din brandvägg i MacOS så kan den ha en direkt inverkan på om xdebug når fram till din editor med xdebug-meddelanden.
Speciellt om du använder en Vagrant-box som behöver kommunicera med IP-nummer, då kan du inte spärra i brandväggen för inkommande trafik.

Gå in i inställningarna under äpplet, säkerhet, brandvägg, tillåt inkommande trafik.

Konfigurera PHP Storm

Det går utmärkt att använda PHP Storm 8.0.3 med PHP 7.0

File >> Default settings >> Sök i sökrutan efter "xdebug"

”Max. Simultaneous connections” : 16
Debug port: 9000 (Jag fick använda 9001)
Kryssa även i de tre kryssrutorna.

Tyvärr räcker inte detta. Öppna ditt projekt och kolla även projektets inställningar i meny

PHP Storm >> Preferences >> Sök i sökrutan efter "xdebug"

Sätt PHP Storm att lyssna på inkommande debugmeddelanden. Symbolen finns i verktygslisten och innehåller en telefonlur, ett stoppmärke och en skalbagge. När du klickar på den blir den grön.
Sätt en brytpunkt i din kod genom att klicka på den grå listen till vänster om en kodrad.

Mappa i PHP Storm

Kör du fjärr-debug, till exempel till en Vagrant-box eller en fjärrserver, då kan PHP Storm ibland ha lite svårt att hitta motsvarande fil lokalt.
Då har PHP Storm ett filträd med dina sourcefiler, och på en del ställen skriver den in motsvarande fasta sökväg som du har i din Vagrant-box.

Den här mappningen ska den sätta upp själv, men jag har varit med om att jag ibland har behövt radera mappningen eller komplettera den.

Du hittar detta i vänstra menyn under Settings >> PHP >> Servers.

Konfigurera Firefox

Ladda ned tillägget ”The easiest xdebug” och kontrollera dess inställningar.

IDE Key: "netbeans-xdebug"

Det gör det samma om du använder Netbeans eller PHP Storm som editor, du kan ändå ha den för IDE nyckeln.
Starta debuggingen genom att klicka på den grå skalbaggen uppe till höger.
Nu ska du kunna ladda om sidan och då ska PHP Storm stanna på den rad du satte brytpunkten på.

Första raden

Om PHP Storm inte stannar vid din brytpunkt, testa då att sätta en brytpunkt på den första php rad som exekveras i din kod.
Då får de reda på om xdebug fungerar över huvud taget.

var_dump()

Om du inte får brytpunkter att fungera så kan du ändå testa ifall xdebug och php fungerar ihop genom att använda php-kommandot var_dump() och dumpa ut någon array-variabel.
Om xdebug fungerar så ska variabeln bli formaterad av xdebug.

Det finns andra kommandon som xdebug lägger till i PHP, se handboken till xdebug för en lista. Då kan du testa med ett sådant kommando i din kod.

Det var en hög med tips. Hoppas du får någon nytta av dem.

Comments are closed.

CharZam