Xdebug Update: April 2020
Another monthly update where I explain what happened with Xdebug development in this past month. These will be published on the first Tuesday after the 5th of each month. Patreon supporters will get it earlier, on the first of each month. You can become a patron to support my work on Xdebug. If you are leading a team or company, then it is also possible to support Xdebug through a subscription.
In April, I worked on Xdebug for about 60 hours, on the following things:
Xdebug 2.9.5
The 2.9.5 release addresses a few bugs. One of them was a follow on from the issue where Xdebug would crash when another extension would run code in PHP's Request Init stage, but only on a second or later request in the same PHP process. As this is not something that's easy to catch with PHP's testing framework that Xdebug uses, this issue slipped through the cracks.
The release fixes another bug, where throwing an exception from within a destructor would crash Xdebug. The fix for this was merely making sure that PHP's internal state is still available:
- if (!(ZEND_CALL_INFO(EG(current_execute_data)) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
+ if (EG(current_execute_data) && !(ZEND_CALL_INFO(EG(current_execute_data)) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
Beyond these two crashes, the release also addressed an issue where Xdebug did not always correct catch where executable code could exist for code coverage analyses. Over the last decade, PHP has been getting more and more optimised, with more internal engine instructions. Unfortunately that sometimes means that these are not hooked into by Xdebug, to see whether there could be a line of code that would make use of these opcodes. As this is often very dependent on how developers lay out their code, these issues are often found by them. Luckily, these issues are trivially fixed, as long as I have access to just the file containing that code. I then analyse it with vld to see which opcode (PHP engine instruction) I have missed.
Xdebug 3 and Xdebug Cloud
Most of my time was spend on getting Xdebug Cloud to a state where I can invite select developers to alpha test it. This includes allowing for Xdebug to connect to Xdebug Cloud. There is currently a branch available, but it still lacks the addition of SSL encryption, which is a requirement for allowing safe transport of debug information.
The communications between an IDE and Xdebug through Xdebug Cloud is working, with a few things related to detecting disconnections more reliably still outstanding.
As Xdebug Cloud needs integration in debugging clients (such as PhpStorm, and other IDEs), I have been extending the dbgpProxy tool to act as intermediate link between existing IDEs and Xdebug Cloud without IDEs having to change anything. This work is still ongoing, and is not documented yet, but I hope to finish that in the next week. Once that and SSL support in the Xdebug to Xdebug Cloud communication has been finalized, I will reach out to subscribers of the Xdebug Cloud newsletter to see if anybody is interested in trying it out.
Business Supporter Scheme and Funding
In April, no new supporters signed up.
If you, or your company, would also like to support Xdebug, head over to the support page!
Besides business support, I also maintain a Patreon page and a profile on GitHub sponsors.
Podcast
The PHP Internals News continues its second season. Episodes in the last month included a discussion on PHP 8's JIT engine and increasing complexity, PHP's RFC process, and a discussion with Larry Garfield about how to improve PHP's Object Ergonomics. It is available on Spotify, iTunes, and through an RSS Feed.
Life Line
Updated a restaurant
I walked 9.6km in 2h5m58s
I walked 7.2km in 1h10m18s
Updated a pet_grooming shop; Deleted a dry_cleaning shop; Confirmed 2 variety_store shops, a fitness_centre, and a convenience shop
I walked 4.1km in 47m50s
I walked 1.2km in 9m08s
Map new layout of Meanwhile Gardens
I walked 10.4km in 1h45m58s
This is probably the shortest chapter I've ever read in any book. And it'll likely stay like that.
Created a bench
Created 10 benches, 3 climbingframes, and 3 other objects; Updated a bicycle_parking and a bench; Deleted a bench
I walked 8.5km in 1h34m09s
Whoop! PHP London is meeting again next week: https://meetu.ps/e/PXrS6/2XF6m/i
Created a massage shop; Confirmed an estate_agent office, a pet_grooming shop, and 2 other objects
I walked 9.9km in 1h50m43s
Add Canteen building back in, with additional tags
Twyford Station footpahts and road layout
Created 2 crossings and an insect_hotel
Created a bicycle_parking; Updated a bench
Updated a cafe
I walked 6.7km in 1h5m45s
Updated a bench; Deleted a bench
Created 5 gates, a crossing, and 3 other objects
Created a fast_food and a recycling; Updated 2 crossings and a bus_stop


Shortlink
This article has a short URL available: https://drck.me/xdebug-20apr-fkw