xdebug

Az Xdebug lassú és nem hagyja békén a var_dump()-ot

Tamás postján fellelkesülve, én is beállítottam itthon a php debug környezetet (PHPEclipse+xdebug). Eddig megvoltam nélküle, de bizony ha egyszer kipróbáljuk, nehéz lesz megválni tőle. Nélkülözhetetlen segítség a mindennapi PHP/Drupal hekkelés közben.

Az Eclipse-et én nem szerettem, és most sem a szívem csücske, de a PHPEclipse-el együtt egy használható eszköznek mondható. A debug melett kifejezetten hasznos funkció a kód kiegészítés és a gépelés közbeni szintaxis elemzés.

Viszont az Xdebug-os környezettel volt két komoly bajom: egyrészt érthetetlenül lassú egy oldal megjelenítése. Érthetetlen, mert sem az sql szerver, sem az apache (+php+xdebug) sem a böngésző kliens nem pörgette a CPU-t, mégis több másodpercig tartott egy oldal megjelenítése. A másik gond, hogy képtelen voltam rávenni az Xdebug-ot, hogy ne definiálja felül a var_dump() függvényt.

A var_dump()-ot sokat használom, főleg a Drupal devel moduljának dvm() függvényén keresztül. De ha belenyúl az Xdebug, a dvm() használhatatlan lesz. A neten (és az xdebug.org/docs-on!) jópár pletyka terjed, hogy miként lehet ezt hatástalanítani. Találtam én mindent, pl ilyeneket:

xdebug.overload_var_display = 0
// vagy
xdebug.overload_var_dump = 0

Érdekes módon nem működnek. Hosszas kutatás után viszont rátaláltam a megoldára: a nevével ellentétben az xdebug.default_enable nem a teljes xdebug-ot kapcsolja ki/be, hanem csak a megjelenítéssel kapcsolatos funkciókat. Tehát ha kikapcsoljuk, attól még a debug működik. Emellett érdemes még kikapcsolni a html_errors standard php.ini kapcsolót is, a teljesen korrekt működéshez.

A másik gond, ami felmerült, a lassú oldal letöltés. Egy E8500-as procin szerintem nem kéne 2-3 másodpercig tartania egyetlen oldal generálásának. Ezt az xdebug.remote_autostart = On beállítás okozta, ami miatt minden egyes oldaletöltés debug session-ként futott le. Ez felesleges, ki kell kapcsolni a fenti funkciót és ha debugolni szeretnénk, elég a GET paraméterek közé felvenni az XDEBUG_SESSION_START=debug_id változót.

Összegezve a fent leírtakat nekem xdebug-ra a következő recept vált be:

; var_dump felülírás hatástalanítása
xdebug.default_enable = Off
html_errors = Off

; debug funkciók bekapcsolása, de
xdebug.remote_enable = On

; debug session automatikusan ne induljon.
xdebug.remote_autostart = Off

A fenti beállításokkal és Tamás leírásával és linkjeivel, teljesen jól használható debug környezetet lehet kialakítani.

Mindenkinek jó rovarírtást.

Xdebug használata windows-on

Az Xdebug egy PHP kiegészítés, amellyel, nem meglepő módon, egy debug eszköz PHP szkriptekhez.

Tartalom

Miért telepítsük az Xdebug-ot
Xdebug telepítése windows környezetben


Miért telepítsük az Xdebug-ot

Segítségével olyan információkat szerezhetünk futás közben amelyket egyébként csak nagyon körülményesen, vagy sehogyan sem tudhatnánk meg.

Például az xdebug_call_function() függvény megmondja, hogy melyik volt az a függvény amely az éppen aktuális függvényt meghívta.

<?php
function caller() {
  return
callee();
}

function
callee() {
  echo
xdebug_call_function();
  return
"Hello World";
}

caller();
?>

A fenti kód kimenete caller lesz.

Ez csak egy példa, emellett rengeteg hasznos dolgot tud még az Xdebug. Részleteket lásd a dokumentációban


Xdebug telepítése windows környezetben

Mi sem egyszerűbb ennél, mindössze 3 lépés az egész!

1. Töltsük le az egyik windows-ra előre lefordított DLL-t. Jelenleg a legfrissebb: http://xdebug.org/link.php?url=xdebug202-51-win

2. A letöltött DLL fájlt másoljuk be a PHP ext könyvtárába.

3. Végül egészítsük ki a php.ini-t a következőkkel:

zend_extension_ts="c:\php\ext\php_xdebug.dll"

[xdebug]
xdebug.auto_trace = 1
xdebug.collect_includes = 1
xdebug.collect_params = 1
xdebug.collect_return = 1
xdebug.default_enable = 1
xdebug.extended_info = 1
xdebug.show_local_vars = 0
xdebug.show_mem_delta = 1
xdebug.trace_format = 1
xdebug.trace_options = 0
xdebug.trace_output_dir = "C:\xampp"

Természetesen az első sort módosítsuk a PHP helyének megfelelően. Az utolsó sor azt a könyvtárat adja meg, ahová az Xdebug a trace információkat menti majd el. Ez bárhol lehet, csak léteznie kell a könyvtárnak.

Feliratkozás RSS - xdebug csatornájára