PHP Debugger — це нове розширення для PHP, створене як форк Xdebug. З нього видалили все, крім step debugging: тут немає profiler, code coverage та tracing. Мета проєкту — запропонувати drop-in replacement, який створює значно менший overhead, коли розширення завантажене, але не використовується активно.
# Майже нульовий idle overhead
Benchmarks із використанням Valgrind instruction counting (проведені через GitHub Actions для PHP 8.2–8.5) демонструють рівень overhead, коли розширення завантажене без підключення до IDE:
| Benchmark | Xdebug | PHP Debugger |
|---|---|---|
| bench.php (синтетичний) | +661.6% | +12.9% |
| Rector (обробка файлу) | +124.5% | +3.6% |
| Symfony request | +35.3% | +1.3% |
# Drop-in заміна для Xdebug
PHP Debugger підтримує INI-префікси php_debugger.* та xdebug.*, тому наявні конфігурації працюють без змін:
; Ваша поточна конфігурація Xdebug працюватиме як є:
xdebug.mode = debug
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9003
xdebug.start_with_request = trigger
; Або використовуйте новий префікс:
php_debugger.mode = debug
php_debugger.client_host = 127.0.0.1
php_debugger.client_port = 9003
php_debugger.start_with_request = trigger
Розширення також повертає true для extension_loaded("xdebug"), тому пакети, які перевіряють наявність Xdebug під час виконання, продовжать працювати. PhpStorm та VS Code функціонують без додаткових налаштувань.
# Фокус лише на Debug
Завдяки видаленню profiling, tracing та code coverage розширення фокусується на одному кейсі: роботі з breakpoints та покроковому виконанні коду.
| Feature | PHP Debugger | Xdebug |
|---|---|---|
| Step debugging (DBGp) | Так | Так |
xdebug_break() |
Працює | Працює |
XDEBUG_SESSION trigger |
Працює | Працює |
| Code coverage | Ні (використовуйте pcov) | Так |
| Profiling | Видалено | Так |
| Tracing | Видалено | Так |
Якщо вам потрібен code coverage, розробники радять використовувати pcov як окреме розширення.
# Новий API спеціально для PHP Debugger
Разом із повною сумісністю з Xdebug, розширення пропонує власні назви функцій та triggers як альтернативу:
// Сумісність із Xdebug (все ще працює):
xdebug_break();
// Еквіваленти PHP Debugger:
php_debugger_break();
php_debugger_info();
php_debugger_connect_to_client();
php_debugger_is_debugger_active();
php_debugger_notify();
Session triggers працюють аналогічно. XDEBUG_SESSION, XDEBUG_SESSION_START та XDEBUG_TRIGGER залишаються актуальними, але тепер доступні й еквіваленти: PHP_DEBUGGER_SESSION, PHP_DEBUGGER_SESSION_START та PHP_DEBUGGER_TRIGGER.
# Встановлення
Binaries доступні на сторінці релізів. Після завантаження відповідного файлу для вашої версії PHP додайте розширення у php.ini:
zend_extension=php_debugger.so
Цей проєкт також є цікавим кейсом AI-assisted розробки. Згідно з README, усе розширення — створення форку, очищення коду, оптимізація та перейменування — було реалізовано за кілька днів за допомогою PhpStorm, Claude Code та OpenClaw.
Ознайомитися з проєктом можна на GitHub.