News

PHP Debugger: A Lightweight Xdebug Alternative Built for Speed

Published
PHP Debugger: A Lightweight Xdebug Alternative Built for Speed image

PHP Debugger is a new PHP extension forked from Xdebug that removes everything except step debugging — no profiler, no code coverage, no tracing. The goal is a drop-in replacement that carries far less overhead when the debugger is loaded but not actively in use.

Near-Zero Idle Overhead

Benchmarks using Valgrind instruction counting (run in GitHub Actions across PHP 8.2–8.5) show the overhead when the extension is loaded with no IDE connected:

Benchmark Xdebug PHP Debugger
bench.php (synthetic) +661.6% +12.9%
Rector (processing a file) +124.5% +3.6%
Symfony request +35.3% +1.3%

Drop-In Xdebug Replacement

PHP Debugger accepts both php_debugger.* and xdebug.* INI prefixes, so existing configurations work without changes:

; Your existing Xdebug config works as-is:
xdebug.mode = debug
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9003
xdebug.start_with_request = trigger
 
; Or use the new prefix:
php_debugger.mode = debug
php_debugger.client_host = 127.0.0.1
php_debugger.client_port = 9003
php_debugger.start_with_request = trigger

The extension also reports true for extension_loaded("xdebug"), which means packages that check for Xdebug at runtime will continue to work. PhpStorm and VS Code both work without any configuration changes.

Debug-Only Focus

By removing profiling, tracing, and code coverage, the extension stays focused on one use case: setting breakpoints and stepping through code.

Feature PHP Debugger Xdebug
Step debugging (DBGp) Yes Yes
xdebug_break() Works Works
XDEBUG_SESSION trigger Works Works
Code coverage No (use pcov) Yes
Profiling Removed Yes
Tracing Removed Yes

If you need code coverage, the project recommends pcov as a separate extension.

New PHP Debugger-Specific API

Alongside full Xdebug compatibility, the extension exposes its own function names and triggers as optional alternatives:

// Xdebug-compatible (still works):
xdebug_break();
 
// PHP Debugger equivalents:
php_debugger_break();
php_debugger_info();
php_debugger_connect_to_client();
php_debugger_is_debugger_active();
php_debugger_notify();

Session triggers follow the same pattern. XDEBUG_SESSION, XDEBUG_SESSION_START, and XDEBUG_TRIGGER all work, and the new PHP_DEBUGGER_SESSION, PHP_DEBUGGER_SESSION_START, and PHP_DEBUGGER_TRIGGER equivalents are available as well.

Installation

Binaries are available on the releases page. After downloading the right binary for your PHP version, add the extension to your php.ini:

zend_extension=php_debugger.so

The project is also an interesting case study in AI-assisted development. According to the README, the entire extension — fork, strip, optimize, rename — was built in days using PhpStorm, Claude Code, and OpenClaw.

You can get started with this extension on GitHub.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Filed in

Sponsored

tinkerwell logo
Tinkerwell

Enjoy coding and debugging in an editor designed for fast feedback and quick iterations. It's like a shell for your application – but with multi-line editing, code completion, and more.

Visit Tinkerwell

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article