Subject: PHP debug session hangs after breakpoint setup when project has many breakpoints — no run command sent.
Environment: Visual Studio 2022 (current), PHP Tools (current), PHP 8.5.4 NTS x64, Xdebug 3.5.1, Windows.
Symptom: With a non-trivial number of line breakpoints set in the project (in my case 830 across 25 files), no breakpoints fire on a normal debug run, and stepping does not work. The script runs to completion uninterrupted. Reducing the breakpoint count to one immediately restores correct behaviour.
Evidence from xdebug.log (log_level 7): Every triggered request produces a fresh Xdebug session. In each session, Devart performs the expected initial handshake — feature_set for resolved_breakpoints and notify_ok, then 830 breakpoint_setcommands, all acknowledged successfully (with resolved="resolved" notifications interleaved as files compile). After the last breakpoint_set ack, the IDE never issues a run, step_into, step_over, step_out, stop, or detach command. The connection sits idle until it is closed; PHP execution proceeds without a debugger attached, so no breakpoints can be hit. Across 38 000 log lines and 15 consecutive sessions, exactly zero run commands appear from the IDE.
Likely area: The hang looks like a deadlock between PHP tools' expectation of synchronous breakpoint_set responses and Xdebug's asynchronous <notify name="breakpoint_resolved"> messages, which arrive on the same channel once feature_set -n resolved_breakpoints -v 1 is enabled. The interleaving window scales with breakpoint count, which matches the "works with one breakpoint, hangs with many" observation. Detailed xdebug log available.
Repro: Open a PHP project with several hundred line breakpoints across multiple files. Start a debug run that triggers Xdebug. The session connects, breakpoints register, no breakpoint fires, script runs to completion. Reduce to a single breakpoint and the same run hits it normally.