Radek Chalupa   konzultace a školení programování, vývoj software na zakázku

Ladění PHP skriptů ve Visual Studio Code s XDebug.

19.9.2019

V tomto příspěvku budeme pokračovat psaním a laděním PHP skriptů ve Visual Studio Code. Minule jsme si ukázali jak ve VCode nainstalovat vhodné doplňky a jednoduše spustit PHP skript. Dnes si ukážeme jak kód PHP krokovat, včetně výpisu okamžitých hodnot proměnných apod. jak jsme zvyklí např. u vývojových nástrojů pro jazyk C/C++.

Především musíme mít nainstalovaný nástroj XDebug, který by měl být ve standardních repositářích většiny hlavních Linuxových distribucí. V Debianu ho najdeme jako balíček php-xdebug. Poté musíme ladění povolit v příslušném souboru php.ini. Cestu k němu zjistíme například z terminálu zavoláním

 # php -i

což nám vypíše informace o konfiguraci PHP a na jednom z úvodním řádku bude něco takového:

Configuration File (php.ini) Path => /etc/php/7.3/cli 

což znamená že budeme upravovat soubor /etc/php/7.3/cli/php.ini. Pro jeho úpravu musíme mít administrátorské oprávnění. Přihlásíme se tedy v terminálu jako root (příkazem "su -") a použijeme např. editor nano

 # nano /etc/php/7.3/cli/php.ini

Nejlépe na konec souboru přidáme následující:

 [XDebug]
 xdebug.remote_enable = 1
 xdebug.remote_autostart = 1

Po restartu webového serveru by mělo být vše připraveno k ladění PHP skriptů. Pro vyzkoušení si opět vytvoříme novou složku, v ní podsložku .vscode se souborem launch.json který bude mít následující obsah:

{
	"version": "0.2.0",
	"configurations": [
		{
			"type": "php",
			"name": "debug PHP script",
			"request": "launch",
			"program": "${file}",
			"runtimeExecutable": "php"
		}
	]
}

Nyní si vytvoříme jednoduchý skript a ukázku podmíněného breakpointu. Vytvoříme soubor test.php:

<?php

echo 'test php debug' . PHP_EOL;
$cislo = 62;
for ($i = 0; $i < 20; $i++)
{
	$cislo = $cislo + $i;
}
echo $cislo . PHP_EOL;

Nastavíme kurzor na řádek uvnitř cyklu for (tj .$cislo = $cislo + $i;) a z hlavní nabídky zvolíme "Debug - New breakpoint - Conditional breakpoint" a do podmínky pro přerušení napíšeme $cislo > 100. Nyní již spustíme skript příkazem "Debug - Start debugging (F5)". Pokud je vše správně nastaveno, běh skriptu se zastaví na breakpointu a v levém panelu na záložce "VARIABLES" se můžeme přesvědčit, že aktuální hodnota proměnné $cislo je 107.

Jak vidíme v levém panelu máme k disposici výpis proměnných s jejich aktuálními hodnotami, dále hodnoty tzv. superglobals, tj. např. $_COOKIE, $_SERVER a další. Také je zde záložka WATCH, kam si můžeme přidat vlastní výraz k vyhodnocení.