Become a Patron!

My Amazon wishlist can be found here.

Life Line

10 years of Xdebug and Xdebug 2.2.0 released

Today it has been ten years since the first release of Xdebug: version 0.7.0. I would like to celebrate this tenth anniversary with a new release: Xdebug 2.2.0. Xdebug 2.2 adds support for PHP 5.4 and provides some new features:

Colours on the command line

First of all there is now var_dump() overloading and colours on the command line. I've already written about that before, but here are the screenshots again:



You can find an article about this here.

Better support for closures in stack and function traces

Closures are functions that don't have a function name associated with them. Therefore, Xdebug creates a pseudo function in its stack traces. The stack trace for this example:

function test1()
        $f = function($a, $b) {
                $Q = strlen($a * $b);

        $f(5, 25);


Looks like:

Notice: foo in /tmp/closure-stack-trace.php on line 21

Call Stack:
        0.0009     268464   1. {main}() /tmp/closure-stack-trace.php:0
        0.0026     269288   2. test1() /tmp/closure-stack-trace.php:27
        0.0032     270024   3. {closure:/tmp/closure-stack-trace.php:19-22}($a = 5, $b = 25) /tmp/closure-stack-trace.php:24
        0.0038     270496   4. trigger_error('foo') /tmp/closure-stack-trace.php:21

In the 3rd line in the call stack you see {closure:/tmp/closure-stack-trace.php:19-22}($a = 5, $b = 25) where /tmp/closure-stack-trace.php:19-22 contains the filename and line numbers on which the closure is defined at.

The size of arrays is now shown with the overloaded variable output

After this change, each array in the HTML version of the overloaded var_dump() function now looks like:

<b>array</b> <i>(size=5)</li>

Before the change, this was only:


Added the method call type to xdebug_get_function_stack

This changes adds another array element to xdebug_get_function_stack() to show whether it was a static or dynamic function call. For example, for:

new Error_Entry(false, $errno);

It now adds the ["type"]=> string(7) "dynamic" element to each stack element:

array(6) {
  string(11) "__construct"
  string(7) "dynamic"
  string(11) "Error_Entry"
  string(%d) "%sbug00241.php"

Extra information to error printouts to tell that the error suppression operator has been ignored due to xdebug.scream

When you have the xdebug.scream option activated, Xdebug will now tell you when it had any effect on the error reporting with a big "SCREAM: Error suppression ignored for" warning prepended to the actual error message.


You can find the full changelog for Xdebug 2.2.0 at the Xdebug website where you can also download the latest version. If you are using Windows, and don't know which binary to download, please refer to the wizard.


If you find Xdebug valuable for your PHP development, perhaps you want to support its development by acquiring a "support" contract. See the buying "support" page if you feel generous.

What's next?

Now Xdebug 2.2 is out of the door, I am looking for new features to add to Xdebug. What would you like to see added to Xdebug? Please leave a comment here, or add your feature requests at


This article has a short URL available:


I am still hoping that we will find the time to implement what we outlined in ;-)

Congratulations on ten years of Xdebug!

Congrats on the 10 years! This is a heckuva tool you developed and I use it every day to debug my code.

Still shipping with .cvsignore ;-) Thank you for the hard work and h'ppy birthday Xdebug.

Add Comment


Will not be posted. Please leave empty instead of filling in garbage though!

Please follow the reStructured Text format. Do not use the comment form to report issues in software, use the relevant issue tracker. I will not answer them here.

All comments are moderated