Xdebug
PHP debug és profiling Xdebug segítségével WordPress fejlesztéshez.
This content is not available in your language yet.
Az Xdebug a PHP legátfogóbb debug és profiling eszköze. Lehetővé teszi a kód lépésenkénti végrehajtását, breakpoint-ok használatát, változók vizsgálatát és teljesítményelemzést.
Főbb funkciók
Szekció neve “Főbb funkciók”- Step debugging - Kód lépésenkénti végrehajtása
- Breakpoints - Megállási pontok beállítása
- Stack traces - Hívási lánc megjelenítése
- Profiling - Teljesítmény elemzés
- Code coverage - Lefedettség mérés
- Var dump javítás - Olvashatóbb változó kiíratás
Telepítés
Szekció neve “Telepítés”PECL-lel (általános)
Szekció neve “PECL-lel (általános)”pecl install xdebugmacOS (Homebrew)
Szekció neve “macOS (Homebrew)”# PHP Homebrew-val telepítvepecl install xdebug
# Vagy brew-val# Xdebug már tartalmazzaUbuntu/Debian
Szekció neve “Ubuntu/Debian”sudo apt install php-xdebugWindows
Szekció neve “Windows”- Látogass el az Xdebug wizard oldalra
- Másold be a
phpinfo()kimenetét - Kövesd a generált utasításokat
Docker
Szekció neve “Docker”FROM php:8.2-fpm
RUN pecl install xdebug \ && docker-php-ext-enable xdebug# Xdebug már alapból telepítve vanddev xdebug onddev xdebug offLocalWP
Szekció neve “LocalWP”- Válaszd ki a site-ot
- Utilities > PHP
- Engedélyezd az Xdebug-ot
Konfiguráció
Szekció neve “Konfiguráció”php.ini beállítások
Szekció neve “php.ini beállítások”[xdebug]zend_extension=xdebug
; Mód beállítása (Xdebug 3+)xdebug.mode=debug,develop,coverage
; IDE kapcsolatxdebug.client_host=127.0.0.1xdebug.client_port=9003
; Automatikus indításxdebug.start_with_request=yes
; IDE kulcsxdebug.idekey=VSCODE
; Log fájl (hibakereséshez)xdebug.log=/tmp/xdebug.log
; Var dump beállításokxdebug.var_display_max_depth=10xdebug.var_display_max_data=512xdebug.var_display_max_children=128Xdebug módok (3.x)
Szekció neve “Xdebug módok (3.x)”| Mód | Leírás |
|---|---|
off |
Kikapcsolva |
develop |
Fejlesztői segédletek (var_dump javítás) |
debug |
Step debugging |
coverage |
Code coverage |
profile |
Profiling |
trace |
Function trace |
Több mód kombinálása:
xdebug.mode=debug,develop,coverageXdebug 2.x vs 3.x
Szekció neve “Xdebug 2.x vs 3.x”| Beállítás | Xdebug 2.x | Xdebug 3.x |
|---|---|---|
| Port | xdebug.remote_port=9000 |
xdebug.client_port=9003 |
| Host | xdebug.remote_host |
xdebug.client_host |
| Engedélyezés | xdebug.remote_enable=1 |
xdebug.mode=debug |
| Auto start | xdebug.remote_autostart=1 |
xdebug.start_with_request=yes |
VS Code beállítása
Szekció neve “VS Code beállítása”1. PHP Debug bővítmény telepítése
Szekció neve “1. PHP Debug bővítmény telepítése”- VS Code Extensions (Ctrl+Shift+X)
- Keress rá: “PHP Debug” (Felix Becker)
- Telepítsd
2. launch.json konfiguráció
Szekció neve “2. launch.json konfiguráció”.vscode/launch.json:
{ "version": "0.2.0", "configurations": [ { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9003, "pathMappings": { "/var/www/html": "${workspaceFolder}" } }, { "name": "Launch current file", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "port": 9003 } ]}3. Docker/DDEV path mapping
Szekció neve “3. Docker/DDEV path mapping”{ "version": "0.2.0", "configurations": [ { "name": "Listen for Xdebug (DDEV)", "type": "php", "request": "launch", "port": 9003, "pathMappings": { "/var/www/html": "${workspaceFolder}" }, "hostname": "0.0.0.0" } ]}PhpStorm beállítása
Szekció neve “PhpStorm beállítása”1. Xdebug konfiguráció
Szekció neve “1. Xdebug konfiguráció”- Settings > PHP > Debug
- Debug port:
9003 - Engedélyezd: “Can accept external connections”
2. Server konfiguráció
Szekció neve “2. Server konfiguráció”- Settings > PHP > Servers
- Add új server:
- Name:
localhost - Host:
localhost - Port:
80vagy a megfelelő - Debugger:
Xdebug
- Name:
- Use path mappings (Docker esetén)
3. Debug indítása
Szekció neve “3. Debug indítása”- Kattints a “Listen for PHP Debug Connections” ikonra
- Állíts be breakpoint-ot
- Töltsd be az oldalt böngészőben
Breakpoint-ok használata
Szekció neve “Breakpoint-ok használata”Breakpoint típusok
Szekció neve “Breakpoint típusok”| Típus | Leírás |
|---|---|
| Line | Adott sorra állás |
| Conditional | Feltételhez kötött |
| Exception | Kivétel dobáskor |
| Function | Függvény hívásakor |
Conditional breakpoint
Szekció neve “Conditional breakpoint”// VS Code: jobb klikk a breakpoint-on > "Edit Breakpoint"// Feltétel: $user_id === 5$user = get_user_by( 'id', $user_id );Exception breakpoint
Szekció neve “Exception breakpoint”VS Code-ban:
- Debug panel > BREAKPOINTS szekció
- Kattints a “+” gombra
- Add meg az exception típusát (pl.
Exception)
Step debugging
Szekció neve “Step debugging”Debug parancsok
Szekció neve “Debug parancsok”| Gomb | Parancs | Leírás |
|---|---|---|
| F5 | Continue | Folytatás következő breakpoint-ig |
| F10 | Step Over | Következő sor (függvénybe nem lép be) |
| F11 | Step Into | Következő sor (függvénybe belép) |
| Shift+F11 | Step Out | Kilépés aktuális függvényből |
| Ctrl+Shift+F5 | Restart | Debug újraindítása |
| Shift+F5 | Stop | Debug leállítása |
Változók vizsgálata
Szekció neve “Változók vizsgálata”Debug közben elérhető:
- Variables panel - Lokális és globális változók
- Watch panel - Egyedi kifejezések figyelése
- Call Stack - Hívási lánc
- Debug Console - Kifejezések kiértékelése
Watch expressions
Szekció neve “Watch expressions”// Hasznos watch kifejezések WordPress-hez$_POST$_GET$wpdb->last_queryget_current_user_id()current_filter()Profiling
Szekció neve “Profiling”Profiling engedélyezése
Szekció neve “Profiling engedélyezése”xdebug.mode=profilexdebug.output_dir=/tmp/xdebugxdebug.profiler_output_name=cachegrind.out.%p.%tProfiling indítása
Szekció neve “Profiling indítása”# URL paraméterrelcurl "http://localhost/?XDEBUG_PROFILE=1"
# Vagy trigger beállítássalxdebug.start_with_request=triggerProfiling eredmények elemzése
Szekció neve “Profiling eredmények elemzése”KCacheGrind (Linux)
Szekció neve “KCacheGrind (Linux)”sudo apt install kcachegrindkcachegrind /tmp/xdebug/cachegrind.out.*QCacheGrind (macOS)
Szekció neve “QCacheGrind (macOS)”brew install qcachegrindqcachegrind /tmp/xdebug/cachegrind.out.*Webgrind (webes)
Szekció neve “Webgrind (webes)”# Docker-reldocker run -v /tmp/xdebug:/tmp -p 8080:80 jokkedk/webgrindProfiling értelmezése
Szekció neve “Profiling értelmezése”| Metrika | Leírás |
|---|---|
| Time | Eltöltött idő |
| Calls | Hívások száma |
| Time (incl) | Idő alhívásokkal együtt |
| Time (self) | Csak a függvény saját ideje |
Code Coverage
Szekció neve “Code Coverage”Coverage engedélyezése
Szekció neve “Coverage engedélyezése”xdebug.mode=coveragePHPUnit-tal
Szekció neve “PHPUnit-tal”<phpunit> <coverage> <include> <directory suffix=".php">./src</directory> </include> <report> <html outputDirectory="coverage"/> </report> </coverage></phpunit>phpunit --coverage-html coverage/Pest-tel
Szekció neve “Pest-tel”pest --coverage --coverage-html coverage/WordPress specifikus debug
Szekció neve “WordPress specifikus debug”wp-config.php beállítások
Szekció neve “wp-config.php beállítások”// Debug móddefine( 'WP_DEBUG', true );define( 'WP_DEBUG_LOG', true );define( 'WP_DEBUG_DISPLAY', false );
// Script debug (minify kikapcsolása)define( 'SCRIPT_DEBUG', true );
// Query logdefine( 'SAVEQUERIES', true );Hasznos breakpoint helyek
Szekció neve “Hasznos breakpoint helyek”// Plugin/téma aktiváláswp-includes/plugin.php: do_action( 'activated_plugin' )
// Hook futtatáswp-includes/plugin.php: do_action()wp-includes/plugin.php: apply_filters()
// Post mentéswp-includes/post.php: wp_insert_post()
// Felhasználó bejelentkezéswp-includes/user.php: wp_authenticate()
// REST APIwp-includes/rest-api/class-wp-rest-server.php: dispatch()AJAX debug
Szekció neve “AJAX debug”// Állíts breakpoint-ot az AJAX kezelőbeadd_action( 'wp_ajax_my_action', function() { // Breakpoint itt $data = $_POST['data']; wp_send_json_success( $data );} );Hibaelhárítás
Szekció neve “Hibaelhárítás”Xdebug nem csatlakozik
Szekció neve “Xdebug nem csatlakozik”- Ellenőrizd a portot
# Port figyelés ellenőrzéselsof -i :9003- Tűzfal beállítások
# macOSsudo pfctl -d # Tűzfal kikapcsolása teszteléshez- Log ellenőrzése
xdebug.log=/tmp/xdebug.logDocker kapcsolat
Szekció neve “Docker kapcsolat”# Docker desktop (Mac/Windows)xdebug.client_host=host.docker.internal
# Linux Dockerxdebug.client_host=172.17.0.1IDE key problémák
Szekció neve “IDE key problémák”; Pontos IDE key beállításaxdebug.idekey=VSCODE; vagyxdebug.idekey=PHPSTORMXdebug telepítés ellenőrzése
Szekció neve “Xdebug telepítés ellenőrzése”<?phpphpinfo();// Keress rá: "xdebug"php -v# Xdebug verziója látható kell legyenTeljesítmény tippek
Szekció neve “Teljesítmény tippek”Xdebug kikapcsolása éles környezetben
Szekció neve “Xdebug kikapcsolása éles környezetben”; production.inixdebug.mode=offSzelektív engedélyezés
Szekció neve “Szelektív engedélyezés”; Csak trigger-rel induljonxdebug.mode=debugxdebug.start_with_request=triggerBöngésző bővítmény használata:
IDE beállítások
Szekció neve “IDE beállítások”// VS Code - max_children növelése nagy tömbökhoz{ "xdebug.maxDepth": 5, "xdebug.maxChildren": 100}Alternatívák
Szekció neve “Alternatívák”| Eszköz | Használat |
|---|---|
| var_dump() | Gyors debug |
| error_log() | Log fájlba írás |
| Query Monitor | WordPress specifikus debug |
| Ray | Modern debug eszköz |
| Clockwork | PHP dev tools |
Ray használata (alternatíva)
Szekció neve “Ray használata (alternatíva)”// Ray telepítésecomposer require spatie/ray --dev
// Használatray($variable);ray()->showQueries();ray()->measure(function() { // Kód mérése});