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

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
Pause All Laravel Queues During a Deploy image

Pause All Laravel Queues During a Deploy

Read article
Laravel Terminal UI for the artisan dev Command image

Laravel Terminal UI for the artisan dev Command

Read article
Pause All Queues and a New artisan dev UI in Laravel 13.25 image

Pause All Queues and a New artisan dev UI in Laravel 13.25

Read article
Laravel monitoring that doesn't bill you by your traffic image

Laravel monitoring that doesn't bill you by your traffic

Read article
Mock PHP Classes in Tests With the Double Library image

Mock PHP Classes in Tests With the Double Library

Read article
Laravel Discount: Coupon Codes, Usage Limits, and Stacking image

Laravel Discount: Coupon Codes, Usage Limits, and Stacking

Read article