Xdebug 2.3: Munging errors
This is the third article in a series about new features in Xdebug 2.3, which was first released on February 22nd.
One of the first features I added to Xdebug was the interception of error messages, so that it was possible to shows stack traces when an error occurred. Xdebug 2.3 has a few additional settings to control the behaviour of interception.
First, we have the new xdebug.halt_level. This setting allows you to tell Xdebug to convert certain warnings into fatal errors. Due to the way how PHP works, you can currently only do this for E_WARNING, E_NOTICE, E_USER_WARNING, and E_USER_NOTICE.
Setting xdebug.halt_level to E_NOTICE | E_USER_NOTICE will make the following script not show Hi!:
<?php
ini_set('xdebug.halt_level', E_USER_NOTICE | E_NOTICE);
trigger_error("Testing");
echo "Hi!\n";
?>
Instead, it will show the call stack, and then abort the script:
Notice: Testing in - on line 3
Call Stack:
0.0082 258480 1. {main}() -:0
0.0085 259400 2. trigger_error() -:3
This feature was requested by Rob Allen, who also wrote about it.
The second related improvement is the addition of the xdebug.force_display_errors and xdebug.force_error_reporting settings. These php.ini only settings can be used to override PHP's display_errors and error_reporting settings. This is typically useful in a legacy code base where developers tried to be clever about not showing warnings, or for example turning of notices that now hamper developer - or upgrade efforts.
Take the following script:
<?php
ini_set("display_errors", 0);
trigger_error("two");
?>
When you run this with just php thescript.php, the output will be nothing (because you are hiding errors). Running the example script with php -d
xdebug.force_display_errors=1 thescript.php, the output becomes:
Notice: two in /tmp/thescript.php on line 3
Call Stack:
0.0002 261072 1. {main}() /tmp/thescript.php:0
0.0002 261944 2. trigger_error() /tmp/thescript.php:3
The related setting xdebug.force_error_reporting acts at a bit mask to force certain errors to be shown. Even with error_reporting set to 0, the following script run with php -d xdebug.force_error_reporting
/tmp/otherscript.php will still show the errors:
<?php
ini_set("error_reporting", E_ERROR | E_WARNING | E_USER_WARNING);
trigger_error("two", E_USER_NOTICE);
?>
With as output:
Notice: two in /tmp/otherscript.php on line 3
Call Stack:
0.0002 261432 1. {main}() /tmp/otherscript.php:0
0.0003 262352 2. trigger_error() /tmp/otherscript.php:3
Other parts in this series:
Life Line
Updated a pub
Updated a pub
Updated a restaurant
I walked 9.5km in 2h0m35s
Ribbit!
I heard this little one way before I could see it. It is so well camouflaged!
Created 3 entrances, 3 emergency entrances, and a main entrance; Confirmed a childcare
I walked 6.8km in 1h16m53s
Updated a restaurant
I walked 10.0km in 1h43m36s
I had a good run at Polderprikker today!
#Polderprikker nummer 84 • 4810/5000
🟦1000 🟦1000 🟨879 🟩931 🟦1000
https://polderprikker.nl/I'm looking forward to attending the State of the Map OpenStreetMap conference this coming week in Paris.
Will I see you there?
Even common birds at nice to photograph. Like this Long Tailed Tit.
#photography #Birds #BirdPhotogaphy #BirdsOfMastodon #nature #london #BirdsOfFediverse #wildlife #NaturePhotography
I visited the Rainham Marshes (near London) yesterday for some bird watching.
Got some reasonable close up shots of a Black-tailed Godwit, and a Snipe.
#BirdPhotography #BirdWatching #Photography #NaturePhotography #Bird
Updated a cafe
I walked 9.8km in 2h39m08s
I hiked 7.1km in 2h52m20s
Updated a pub
I walked 6.2km in 1h2m41s
Merged pull request #1104
Drop support for PHP 8.1
I walked 1.1km in 52m54s
Merged pull request #1103
Drop support for PHP 8.0
Merged pull request #1102
Upgrade composer for benchmarks




Shortlink
This article has a short URL available: https://drck.me/errors23-bns