Fejlesztés támogatás Xdebuggal

Török Gábor

Magyarországi Web Konferencia 2007

Török Gábor előadása a Magyarországi Web Konferencia 2007 rendezvényen Fejlesztés támogatás Xdebug címmel.

Az előadóról

Török Gábor, jelenleg a webmarketing, keresőmarketing megoldást szállító WebMánál-nél fejlesztő, továbbá a Weblabor egyik szerkesztője. PHP-vel és közvetve webes technológiákkal 1999 óta foglalkozik. Élénken érdeklődik a szakmai újdonságokért, kedvelt programozási nyelve a Python.

Fejlesztés támogatás

A programozói munkát fejlesztést támogató eszközök tömkelege segíti. Egyesek az egyszerű kód színkiemeléssel, automatikus sorbehúzással, mások intelligens függvény kiegészítéssel, élő dokumentációval garantálják a fejlesztés hatékonyságát. Szintén idesoroltatnak az ún. debugger, profiler és további a programkód elemzését biztosító eszközök is, amelyekkel programozói hibák, illetve az alkalmazás szűk keresztmetszeteinek felderítése történhet. Az előadás tárgya ez utóbbi csoportba tartozó Xdebug lesz.

Fejlesztés hatékonysága

A C nyelvből ismert assertion kifejezések alkalmazásának lehetősége PHP-ben is megvan. (A témában született egy kiváló két részes cikk Papp Győző tollából a Weblaboron.) A unit teszttekkel alkalmazásunk strapabíróságát, megbízhatóságát, ellenállóságát tesztelhetjük. Saját hibakezelő rendszerrel és a kivételek segítségével több információ tudtható meg a felmerült hibáról.

A debugging fogalma

Debuggingnak, debuggolásnak nevezzük azt a módszeres folyamatot, amely a hibák felderítésére, megszüntetésére irányul annak érdekében, hogy a szoftver az elvárt viselkedést tanúsítsa.

Debuggolás menete

A debuggolás menete öt lépésre osztható. Először szükséges, hogy a problémát észleljük, valamint határozottan el tudjuk dönteni azt, hogy az észlelt jelenség valóban rendellenes működésnek tekinthető. Ezt követően a bug lehetséges kiváltó okait kell megkeresnünk, majd meg kell találnunk azt a legszűkebb környezetet, amelyben a bug jelentkezik, amelyen belül a hiba reprodukálható. Ha ennek birtokában vagyunk, akkor lehetséges a bugot orvosló javítás fejlesztése, majd ennek végeztével a bugfix tesztelése, valóban megoldást jelent-e a problémára, nem vet-e fel esetleg újabb bugokat, végül a bugfix alkalmazása az eredeti környezetre.

Gyakori PHP programhibák

Regin Gaarsmand The PHP coder's top 10 mistakes and problems címen publikált cikkében gyakori PHP programozói hibákra hívja fel a figyelmet. Többek között említést tesz a nem megfelelően, rosszabb esetben egyáltalán nem kezelt felhasználói inputokról és a szintaktikai eredetű hibákról, amelyek mind-mind könnyebben kivédhetők megfelelő fejlesztést támogató eszközzel.

Gyakori PHP programhibák (2)

A PHP interpreter maga kevés információt közöl a levágott végtelen ciklusok, vagy a rekurzív függvény hívások okozta verem túlcsordulás eredetéről. Megfelelő debugger segítségével hamar felderíthető a probléma forrása. Sterling Hughes a 2003-as New York-i PHPCon konferencián tartott Top 7 Mistakes in PHP Programming előadásában a PHP alapok ismeretének hiányából fakadó problémákra világít rá.

Elterjedt PHP debuggolási szokások

A fejlesztő környezet szintaxis színkiemelésének támogatása, szerver oldalon a hibák kijelzésének bekapcsolása, a felmerült hiba környezetében alkalmazott echo kiíratások mind-mind segítenek a hibák elkerülésében, ill. azok fellelésében, de megfelelő, átgondolt debuggolási módszertan hiányában mindezek csak a felületes (pót)cselekvések.

Hatékonyabb PHP debuggolás

PHP-hez több nyílt forrású debugger is elérhető, ezek közül mi az Xdebuggal foglalkozunk. Természetesen nem áll, hogy ez egyértelműen jobb volna, mint a többi; egyszerűen én ezt szoktam meg, megbízható eszközként tapasztaltam.

Xdebugról

Az Xdebugot vétek lenne debuggerként felcímkézni; rendkívül jól használható tracer és profiler funkciókat is tartalmaz. A több mint négyéves projekt gondozója többek között a PHP unikód támogatásáért, input_filter kiterjesztésért is felelős Derick Rethans, az eZ system fejlesztője. Az Xdebug nyílt forrású BSD licencelésű. Több keretrendszerrel is képes együttműködni (pl. PHP Eclipse, Komodo).

Xdebug telepítése

Az Xdebug elérhető PEAR/PECL tárolókból, de telepíthető a projekt weboldaláról letölthető forráscsomagból is. Helyes működéséhez legalább 4.3-as verziójú PHP interpreter szükséges. A felhasználói visszajelzések alapján Linux, Mac és Windows környezetben megbízhatóan működik. Mind a mod_php, mind a FastCGI illesztővel együttműködik. Fedora Linux alatt akár a sudo apt-get install php-pecl-xdebug paranccsal azonnal telepíthető.

Az Xdebug konfigurálása

Az Xdebug konfigurációs direktívái elhelyezhetők globálisan a php.ini-ben, az adott domén .htaccess fájljában, továbbá a programkód inicializáció részében az ini_set() függvény segítségével. Többnyire én a .htaccess pártfogója vagyok, ezzel a módszerrel jól szabályozható per alkalmazás az Xdebug viselkedése, mégsem szükséges a forráskód érintése.

Az Xdebug működésének ellenőrzése

Az Xdebug jelenlétét legegyszerűbben a phpinfo()-val kérdezhetjük le. Fontos megjegyezni, hogy várhatóan nem fog együttműködni egyéb Zend kiterjesztésekkel. Ez a probléma egy későbbi verzióban fog javításra kerülni.

Xdebug mint debugger

Az Xdebug a PHP beépített visszajelzését felülbírálja, a var_dump() függvényt pedig egy intelligens, színkiemelésre építő függvénnyel cseréli le. Lássuk, hogyan fest egy Drupal 5.1 telepítőjének képernyője Xdebuggal!

Xdebug részletes hibajelzése

Az Xdebug hibajelzése a Drupal 5.1 telepítőjében

Az eredeti PHP hiba üzenet mellett táblázatos formában nyomon követhető az alkalmazás életútja (call stack) a hiba keletkezéséig. Minden egyes sor egy függvény hívást jelöl, annak idő- és memória költségével, a függvénynek át- és abból visszaadott változók értékeivel, továbbá a hívás konkrét helyének megjelölésével. Beállítástól függően a táblázat alatt a helyi, globális, GET-tel vagy POST-tal kapott stb. változók és értékeik sorakoznak fel.

Példa Xdebug konfiguráció

Remote debugging

Az Xdebug képes debugger motorként működni egy fejlesztő környezet (IDE) debuggere keze alatt. A két eszköz kommunikációjához a GDB-t és a fejlettebb DBGp-t támogatja.

Xdebug mint tracer

Xdebug mint tracer

Xdebug mint tracer (3)

Az Xdebug hibaképernyője is tekinthető egyfajta trace-nek, azonban ez a fajta aspektus hiba meglétét feltételezi. Az Xdebug tartalmazta auto tracing támogatással a programkód módosítása, és annak eredeti kimenetének megváltoztatása nélkül lehetséges az alkalmazás kvázi átvilágítása.

Xdebug mint tracer (4)

Az Xdebug auto trace funkciójának egy lehetséges kimenete

Xdebug mint profiler

Xdebug mint profilier (2)

Ha a programkód konkrét szeletének idő- és memóriaköltségeire vagyunk kiváncsiak, a legcélszerűbb talán az Xdebug xdebug_time_index() és xdebug_memory_usage() függvényeit használni. (Valamennyi Xdebug függvény az xdebug_ prefixummal van ellátva.)

Xdebug mint profiler (3)

Az Xdebug a debugging és tracing funkcionalitásán túl profilerként is használható. Az alkalmazás kód teljesítmény faktorainak vizsgálatához szükséges adatokat cachegrind formátumú állományba rögzíti, amely megfelelő grafikus eszközzel (pl. WinCacheGrind, KCacheGrind) könnyen kiértékelhető.

Xdebug mint profiler (2)

KCacheGrinddal processzált Xdebug generálta cachegrind állomány

Xdebug jövőkép

Az Xdebug várhatóan a jövőben elszakad PHP-s gyökerétől, és egyaránt alkalmazható lesz akár Python vagy Perl nyelvű fejlesztésekhez is.

Összegzés

Az Xdebug segítségével módszeres debuggolási koncepcióhoz szoktathatjuk magunkat, amely javítja a fejlesztés hatékonyságát, csökkentheti a hibakeresésre fordított idő mennyiségét, továbbá lehetőséget teremt az alkalmazás keresztmetszeteinek felderítésére. Mindezek azonban nem helyettesítik a megfelelő fejlesztési módszertant.

A debuggolásról

Kérdések?

Technorati címkék: , ,

Következik

Felhasznált irodalom