Varasemalt on Zone blogis olnud juttu Xdebug kasutamisest nii Sublime Texti kui ka Visual Studio Code baasil. Võiks küsida, “mis on pildil valesti”? Kui eelmised näited käsitlevad seadistamist parima tasuta ja tasulise PHP-redaktoriga, siis järgnev aitab seadistada Xdebug’i PhpStorm’iga – väidetavalt parim PHP IDE, mida raha eest osta saab.

Vaja läheb:
- Zone virtuaalserver
- PhpStorm
- toimiv SSH-ühendus virtuaalserveri ja lokaalse arvuti vahel
- SSHFS või SFTP – mingi lahendus, mis lubaks serveris olevaid faile lokaalselt näha ja muuta
Väike lisamärkus PhpStorm kohta Xdebugi kontekstis: olemuselt on PhpStorm mõeldud arendusmudelile, kus kogu arendus ning testimine koos vigade otsimise ja kõrvaldamisega tehakse ära kohalikus arvutis ning alles viimases etapis toimetatakse kood serverisse (deployment). PhpStorm lubab teoorias küll ka kaugarendust (remote-development), kuid see eeldab PhpStorm kliendi paigaldamist serverisse. Privaatserveri puhul on see võimalik, kuid jagatud halduse kontekstis – ehk starter-paketga virtuaalserveris – paraku mitte.
Selleks, et serveris olevat koodi saaks Xdebugiga kontrollida läbi PhpStormi, on vaja kasutada mõnd lahendust, mis oskaks failisüsteemi tasandil eemalolevas serveris faile näha – näiteks SSHFS Macil ja Linuxil, SFTP Windowsil. Sellisel juhul on serveris olevaid faile võimalik menetleda sarnaselt kohaliku arvuti failidega ning debug’imisel mööda koodi liikuda. Veaotsingu seadistamine ja kasutamine pole ehk küll nii kaunis ja sujuv, kui PhpStorm arendajad soovisid, kuid häda ei anna häbeneda – teeme ära!
Hakatuseks tuleks kontrollida, et Xdebug laiendus oleks serveri poolel sisse lülitatud. Seda saab teha, kui Minu Zone virtuaalserverite alajaotuses minna Veebiserver -> Peadomeeni seaded -> Muuda -> PHP laiendused.

Näites on selle tarvis tehtud värske alamdomeen – sel juhul on kontrollimist/muutmist vajav seadistus asukohas Veebiserver -> Alamdomeenid -> Muuda -> PHP laiendused.

Kui Xdebug ei ole sisse lülitatud, siis tuleks seda kindlasti teha. Maksimaalselt viie minuti jooksul peaks tehtud muudatus ka serveri pool kajastuma.
DocumentRoot kataloogi (või ka alamdomeeni omasse nagu näites) oleks mõistlik panna fail, mis brauserist vaadates midagi sisukamat näitaks. Eeldame, et SSHFS on seadistatud ning koos sellega on PhpStormis võimalik faile muuta. Tuleks luua uus fail nimega index.php, mille sisu võiks olla järgnev:
<?php
xdebug_info();Code language: PHP (php)
Kui nüüd veebilehte värskendada, siis võiks tulemus välja näha järgmine:

Siit on ilusti näha, et Xdebug on serveri php juurde lisatud ning toimimas. Seega võiks senise koodi asendada millegi lihtsaga, et saaks jälgida, kuidas debug’imine PhpStormi abil välja näeb.
<?php
echo "Hello world!";
echo "</br>";
foreach (range(1,5) as $line) {
echo "Line number " . $line;
echo "</br>";
}Code language: PHP (php)
Server on meie poolt jooksutatava koodiga kursis, küll aga ei tea PhpStorm midagi Xdebug poolt pakutavast infost. Nüüd tulekski luua vastav ühendus. Selleks tuleks kohalikus arvutis käivitada käsk:
ssh -R <IP-silmusaadress>:9003:localhost:9003 -N -f <Süsteemse kasutaja ja grupi nimi>@<Domeen>Code language: PHP (php)
Palju imelikke numbreid ja tähti korraga? Sobivad väärtused asendamiseks leiab virtuaalserveri haldusest Veebimajutus -> Serveriteenus -> Süsteemsed andmed. Port 9003 on vaikimisi valik Xdebug jaoks.
Antud käsk loob tagurpidi SSH-tunneli serveri ja kohaliku arvuti vahel. PhpStorm tuleb seadistada vastavat ühendust kuulama. Selleks tuleb vajutada menüüribal putuka ikoonile, “Start Listening For PHP Debug Connections”.
Samuti oleks mõistlik lisada koodi sisse mõni Breakpoint, selleks tuleks klikkida reanumbril.

Xdebug alustab oma tegevust sellel hetkel, kui serveris olev kood käivitub ja “koju helistab”. Xdebug seadistus php.ini failis peab olema: xdebug.mode=debug. Järgmiseks tuleks brauserile lisada Xdebug Helper nimeline laiendus ning ka seal määrata töörežiimiks debug. Veidi täpsem juhend on Sublime Text’i juhendis, vaata linki allpool.
Nüüd tuleks minna veebibrauserisse ning püüda vastset lehekülge avada. Kui Xdebug režiim on sobiv, siis kohalikus näites jääb selle peale veeb “ketrama”, küll aga annab PhpStorm teada:

Üle tuleb kontrollida, et failirajad serveris ja kohalikus arvutis kokku langeksid. Edasi tuleb lihtsalt Accept vajutada, ning Debug sessioon on alanud ning programm peaks jääma seisma esimese breakpointi juures!

Võrreldes Visual Studio Code’i ja SublimeText’iga on PhpStorm käitumises teatav eripära korraga debugimisel ja renderdamisel. Samm-sammult debugides liigub debugger mööda koodi ilusti edasi, kuid väljund renderdatakse alles peale programmi töö lõpetamist.
Hea lugeja! Kui sul on antud asjaolule lahendus pakkuda, kuidas väljund sünkroonis breakpointidega toimima panna, siis kirjuta arne@zone.ee. Kui seni on aga tõesti vajadus renderdamist jälgida, siis PhpStorm’i enda Output Console saab kuvamisega hakkama.
Debug-sessiooni lõpetamisel ei tohiks SSH-tunnelit lahti unustada, sulgemise kohta saab lugeda Sublime Text + Xdebug postitusest, link allpool. Samuti peab Xdebug režiimi välja lülitama (xdebug.mode=off või kommenteerida rida lihtsalt välja), muidu jätkab Xdebug oma info saatmist ning see ei mõju veebisaidi jõudlusele hästi.
Edukat veaotsingut!
Lisalugemist:
– https://www.jetbrains.com/help/phpstorm/remote-debugging-via-ssh-tunnel.html
– https://www.zone.ee/blogi/xdebug-seadistamine-zone-veebimajutuses-sublime-text/
– https://www.zone.ee/blogi/xdebug-seadistamine-zone-veebimajutuses-vscode/
– https://chromewebstore.google.com/detail/xdebug-helper-by-jetbrain/aoelhdemabeimdhedkidlnbkfhnhgnhm