New in Xdebug 2.2: Colours on the command line
This is the first article in a series about new features in Xdebug 2.2. Besides support for PHP 5.4, there are a few that might be of interest.
Xdebug has overloaded var_dump() with xdebug_var_dump() for a long time and the overloaded function could be configured with a few configuration settings. There is xdebug.var_display_max_data to configure how much of a string should be shown; xdebug.var_display_max_children to configure how many children in an array should be shown and xdebug.var_display_max_depth to configure how many levels "deep" the var_dump() should go on for. This functionality was available for when PHP had its html_errors setting on as is usually the case in a web environment1.
Xdebug 2.2 adds this same functionality to the non-HTML environment: the command line. Now the overloaded var_dump() and native xdebug_var_dump() functions also accept the three aforementioned settings:
derick@whisky:~$ php \
-dxdebug.var_display_max_data=8 \
-dxdebug.var_display_max_children=4 \
-r 'var_dump( "a longer string", array( 1, 2, 3, 4, 5, 6, 7 ) );'
outputs:
string(15) "a longer"...
array(7) {
[0] =>
int(1)
[1] =>
int(2)
[2] =>
int(3)
[3] =>
int(4)
(more elements)...
}
Now, to be fair. This is all a side effect; and merely an add-on to a patch by Michael Maclean. He wrote a patch that adds colours to the output on the command line by using ANSI escape codes. This patch also made the overloaded var_dump() listen to the limiting settings for variable display. After his patch, the following was the behaviour on the command line as long as stdout is a tty and xdebug.cli_color is set to 1.
I have extended this so that the settings regarding data display also work without xdebug.cli_color set to 1. Further more, in Xdebug 2.2.0RC1, setting xdebug.cli_color to 2 forces the colours from being shown, even if stdout is not a tty.
Initially, the colour coding of errors and var_dump() output, would only work on a Unix system where ANSI escape codes are commonly supported. After the release of Xdebug 2.2.0RC1, Chris Jones submitted a bug report suggesting that this functionality could also be available on the Windows console. I wasn't aware that Windows could do this any more since they dropped ANSI.SYS but apparently there is a tool, ANSICON, that reimplements this. From the next release, Xdebug 2.2.0RC2, Xdebug will now also check whether the ANSICON environment variable is set, just like Xdebug would check whether stdout is a tty on a Unix platform. As a result, the equivalent console output as shown before looks like the following on Windows (providing ANSICON is installed):
Now the only thing left is adding complete documentation for this feature ;-)
As always, if you think Xdebug is a valuable tool, have a look at http://xdebug.org/buy-support.php.
Comments
would you accept a patch to add a parameter to xdebug_var_dump to always emit ANSI codes even in a webserver SAPI? This could be extemely handy for curl-based debugging of APIs.
If so, I would look into making this happen (with the disclaimer that my C is very, very rusty)
@Philip; Sadly, we can't do that as var_dump() and xdebug_var_dump() take one or more variables as arguments to dump.
-
1
: Except for in PHP 5.3, where this sadly was turned off by default.
Life Line
I've just finished reading "Snow Crash" by Neal Stephenson. I found this a fun and excellent read.
Updated a restaurant
Updated a restaurant
Updated a restaurant
Updated a restaurant
Updated a brewery
Updated a restaurant
Updated a restaurant
Having dessert before even attempting to go to the restaurant for my (early) birthday dinner.
Enjoying this barrel aged quadrupal, in entirely new Dutch city (another Christmas tradition for us).
Updated a bar
Updated a restaurant
Updated a pub
Updated a bar
Updated a restaurant
Updated an attraction and a museum
Updated a restaurant
Updated a bar
Updated a brewery
I walked 7.4km in 1h17m31s
I walked 1.0km in 8m59s
I know my French is pretty terrible, but I'm sure I'm closer to the correct answer than what's shown here...
I walked 1.2km in 12m04s
I walked 6.4km in 1h11m52s
Merge branch 'v2022'
Merge pull request #169 from psumbera/solaris-2




Shortlink
This article has a short URL available: https://drck.me/clicolor-9cr