Xdebug Update: September 2026

In this update I explain what happened with Xdebug development in the last months. Support through Patreon and GitHub has been continuing to decline, and now covers about 13 hours a month only. If you can help, that'd be greatly appreciated.

In the last few months I have been working on getting Xdebug ready for PHP 8.6. However, there have also been a few notable changes that warrants highlighting.

Code Coverage

First, I have rewritten Xdebug's code coverage. In earlier versions, Xdebug would analyse PHP code during execution, and at the same time, and in the same data structures, collect code coverage information. Now, these tasks are split.

This results in more accurate coverage information, fixing bugs such as Inconsistent output of branch/path data when running under Opcache. It also means that some behaviour changed. I would welcome further testing during the alpha and beta releases of Xdebug 3.6.

Unfortunately, the changes also has a cost associated with it. The new approach uses more memory and adds an additional performance penalty.

To alleviate some of this impact, I have started a branch implementing a few optimisations. This has not been merged yet, but you can track the changes in this experimental GitHub branch. Right now, these two changes reduce the number of instructions by about 6%, but I have only just started this project.

Windows

Secondly, failing to make a debugging connection on Windows now fails faster. I wrote a blog post about this, Fail Faster, where I explain in detail what the cause is, how I found out about it, and what I changed. In short, on Windows, if Xdebug now tries to make a connection to an IDE that isn't listening on the port, the connection attempt will break off immediately, instead of waiting for the 200ms time-out. This was not a bug in Xdebug, but rather something that Windows does in an odd way.

FrankenPHP

Lastly, a contribution by Xavier Leune makes Xdebug work better with FrankenPHP's worker mode. This feature makes sure that upon the first function call in a new worker request, Xdebug tries to connect to the IDE, just as it would do for normal PHP requests. Unlike "normal" PHP, FrankenPHP's worker mode reuses the same PHP "request" multiple times.

Contributions

Starting with Xavier's contribution and Pull Request, I have decided to approach contributions in a more personal way. Any substantial contribution now not only needs a ticket and pull request, but I will insist on having a face-to-face (online) conversation with you where you explain me how the new feature works. This is both to teach me, as I need to maintain it, but it also is useful for the contributors as they will learn how I approach development. While going over the feature with Xavier, we found several problems that are now addressed. I think this was a really good experiment which I will now put into practise.

Dealing with Bots

Scraper bots have also been a problem, and it is unfortunately now necessary that you need to ask me before you can get access to signing up for the issue tracker, and applying filters.

There were two different attacks in fact. The first one had bots signing up a lot of new accounts. A second badly behaved AI scraping bot was trashing the server with so many new expensive search requests (making use of filters), that it was taking the server down constantly. I don't like having to do this, but I can also not see a way out.

What's Next?

Before the next release, I would still like to make a few additions for native path mapping, namely issues #2399 and #2400.

For now, I would hope that you could try out Xdebug 3.6.0alpha1, with the latest version of PHP (8.6). Let me know if you find any issues, or if you have any questions.

Xdebug Cloud

I have reworking Xdebug Cloud, the Proxy As A Service platform to allow for debugging in complex networking scenarios.

Packages will start at £16/month for one-developer companies.

Shortlink

This article has a short URL available: https://drck.me/xdebug-25sep-kdo

Comments

No comments yet

Friday Night Dinner: Kolae

The menu is extensive, and as we didn't quite know what to pick, we went for the easy option, and chose the set menu. We had the non-vegetarian set menu, but we see the website has a vegetarian set menu too. Both were dairy free, if that is a consideration.

The meal started with Biryani Rice Crackers with Pickled Ginger and Green Nahm Jim. A stack of crispy and tangy crackers showed up, with hints of spice and sour. For our starters, we were served Kolae Grilled Tiger Prawns. These had a lovely sauce covered, and were served with some kind of fruit, with the flavours of grape and citrus to squeeze on top. The Green Mango salad was also spicy, but at the same time sweet, with dried shrimp adding some crunch. The Soy-Braised Pork Belly showed up a while later — the kitchen had mixed something up. The wait was well worth it, as this was in our opinion the best dish on the menu. The sauce was sticky and rich, and the pork succulent and tender. The sauce was so good. A spoon was deployed to not leave any of the sauce behind. Due to the wait, we were also served a Chicken Bamboo Skewer, which was also awesome, this is an optional extra on the set menu.

As our main course, the menu provided us with Stir Fried Farm Greens, with some garlic and soybeans. At first, this looked really spicy due to the big chilly on top, but it turned out fairly mild. It fit well together with the Stonebass Curry, and the Hom Mali Rice.

We did not have space for dessert after this. It was a great meal, with interesting flavours. The restaurant is in a good location, very close to the Borough High Street exit of the London Bridge tube station. We would definitely recommend it, with the only critique that it can be a bit noisy upstairs if there is a loud group nearby.

Biryani Rice Crackers
Biryani Rice Crackers
1 / 8
Grilled Tiger Prawns
Grilled Tiger Prawns
2 / 8
Green Mango Salad
Green Mango Salad
3 / 8
Chicken Bamboo Skewer
Chicken Bamboo Skewer
4 / 8
Phuket Style Pork Belly
Phuket Style Pork Belly
5 / 8
Stir Fry of Farm Greens
Stir Fry of Farm Greens
6 / 8
Gati Stonebass Curry
Gati Stonebass Curry
7 / 8
New Season Hom Mali Rice
New Season Hom Mali Rice
8 / 8

Shortlink

This article has a short URL available: https://drck.me/kolae-kdh

Comments

No comments yet

Friday Night Dinner: Little Red Pepper

The Little Red Pepper is the name of the second incarnation of a restaurant at the same place. Before the extensive and lovely refurbishment it was called "The Red Pepper", but we were pleased on our first visit back to see that it's the same team with mostly the same menu. We have been many times over the last decade, either after drinks at Real Drinks a few doors down, or after showing my nephews around London. We had never had a Friday Night Dinner here, and with its new name in place, it seemed a good opportunity to do so.

From the menu, we picked the courgette fries as our starter. They've been a favourite for a while. And they did not disappoint.

For her main, my wife had the Linguine al Gamberi. Juicy prawns with cherry tomatoes, garlic, and a hint of chilli. I had the Ravioli, with Ricotta and fresh spinach — finished with a butter and sage sauce, and topped with some Parmesan. They were well filled, and the sauce nicely brought it together.

We didn't fancy dessert, but instead enjoyed a digestif. Again an enjoyable meal, and we'll very likely be back.

Courgette Fries
Courgette Fries
1 / 3
Ravioli
Ravioli
2 / 3
Linguine al Gamberi
Linguine al Gamberi
3 / 3

Shortlink

This article has a short URL available: https://drck.me/little-red-pepper-kd7

Comments

No comments yet

Become a Patron!
Mastodon
GitHub
LinkedIn
RSS Feed
Flickr
YouTube
Vimeo
Email

My Amazon wishlist can be found here.

Human-Made Webring
previous | random | next

Life Line