LDEV-6309: self-referential struct crashes the variables view
LDEV-6309 Reported by @michaeldiederich: setting a breakpoint and expanding the variables scope in VS Code crashed the DAP launcher with StackOverflowError whenever a struct in scope contained a reference to itself.
Stack trace cycled between StructImpl.hashCode() and ConcurrentHashMapNullSupportJDK.hashCode(). Root cause: the debugger’s variable tracker used a WeakHashMap, which calls hashCode() on the key when you put or get an entry. StructImpl.hashCode() walks all values — self-referential struct → infinite recursion → SOE.
Fix: switched the tracker to identity-keyed weak references (ConcurrentWeakKeyMap), so registration uses System.identityHashCode() and never walks the contents. Affects Lucee 7.0+ in both agent and native modes — 6.2 was unaffected because its StructImpl.hashCode() doesn’t recurse into values.
Install
Extension mode (Lucee 7.1+) — drop the .lex into lucee-server/deploy/: