Xdebug Update: March 2019
This is the first of the monthly update reports in what happened with Xdebug development in this past month. In these reports I will outline what I've been working on the month that has passed. It will be published on every second Tuesday of each month. Patreon supporters will get it earlier, on the first of each month. You can become a patron here.
In March, I worked on the following things:
CI
Xdebug needs testing on many PHP versions, from PHP 7.0.0 to PHP 7.3.3, and the tip of the PHP 7.0 to 7.4 and master branches. Each patch version can introduce changes, and so they all need to be tested against. There are also two different configuration axis: thread-safe vs. non-thread-safe, and 32-bit vs 64-bit. There are currently 37 versions, and with all 4 combinations, that makes 148 configurations to test. If I would test this with Travis CI this would take at least an hour, and with Appveyor it would take at least 16 hours. This is clearly not something that I would like to wait on.
So instead I set up a local CI system, where after each commit I can kick off a script that recompiles and tests all of the configurations. I test the following three variants for each PHP version: 64-bit and non-thread-safe (that's the normal one most people use), 64-bit with thread-safe, and 32-bit with non-thread-safe. My local machine can run 24 tasks in parallel, and the full run of recompiling and testing takes less than 5 minutes.
The results are imported in a MongoDB database that I run on their Atlas hosted server, and the results are read and published by the Xdebug website, where you can see the result of the latest 8 runs.
I still need to add the with-OPcache/without-OPcache access; right now, I only test with OPcache present and loaded. I would also like to add configurations of daily versions of the latest PHP-7.4 and master branches to be able to get PHP API changes, and functional changes before they start breaking PHP.
Bugs
I created stablexdebug_2_7 branch so that I can work on both bug fixes (in xdebug_2_7) and features (in master). There is currently a persistent bug that I discovered while analysing #1646: Excessive error messages for broken pipes. I noticed that although my tests would check for this happening, it would never actually make sure that there were no messages sent to stderr. When enabling this, I encountered issues in the step-debugger tests where I wouldn't correctly detach the debugging session.
These tests are now fixed, but there is now one that produces an elusive crash bug that I haven't managed to track down now.
Beyond the broken-pipe step debugger connection issue, I have also started to make a little bit of progress in addressing #1388: Support 'resolved' flag for breakpoints in cooperation with Jetbrains and the PhpStorm team, who are sponsoring this work.
Podcast
The last thing I wanted to draw your attention to is a new podcast that I started: PHP Internals News. This is a weekly-ish 15 minutes-ish long podcast, where I talk with PHP internals developers about a new RFC, implementations, and upcoming features. It is available on Spotify and iTunes, and an RSS Feed.
So far I have spoken with Nikita Popov on the Saner string to number comparisons RFC, Anthony Ferrara on his PHP Compiler and FFI, and Joe Watkins on the Abolish Narrow Margins and Weak References RFCs. Why not give it a listen too?
Life Line
Created a bench and a crossing
Created 2 benches and a crossing; Updated 5 cushions, a post_box, and a crossing
Created a crossing; Updated a cushion
If you were wondering whether the www.php.net & downloads.php.net services weren't responding very well in the last 6 hours — thousands of requests/sec to https://www.php.net/ 's root.
The server's load was 720, didn't die, but CDN connections to it timed out.
Now there is a caching strategy in place for a selected set of resources.
Updated a bench
Created 3 benches; Updated 10 benches
Updated a bench
Updated a bus_stop
Created a bench and a waste_basket; Updated 6 bus_stops and a crossing
Created 2 waste_baskets and a recycling; Updated 2 bicycle_parkings and a recycling
Updated a fast_food, a funeral_directors shop, and 2 other objects; Confirmed a fast_food and a hairdresser shop
Created an information; Updated 3 benches and 2 waste_baskets
Updated 2 benches and a waste_basket
Updated a bench
Created a waste_basket and an information
Created a waste_basket
I hiked 18.0km in 4h1m52s
I walked 1.4km in 17m19s
I walked 4.5km in 1h21m49s
I just made and ate, a bowl full of bacon fried Brussels Sprouts. Not under duress, and out of my own free will.
Added new residential building
Created a hairdresser shop; Confirmed a convenience shop and a dry_cleaning shop
Created a building_materials shop, a vacant shop, and 4 other objects; Confirmed a hairdresser shop, a cafe, and 2 other objects
I walked 8.3km in 1h33m44s



Shortlink
This article has a short URL available: https://drck.me/xdebug-19mar-es0