Extension Debugger 3.0.0.6-SNAPSHOT

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.

Repro:

s = {};
s.self = s;
// breakpoint here, expand `variables` -> boom

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/:

debugger-extension-3.0.0.6-SNAPSHOT.lex

Agent mode (older Lucee) — Java agent jar:

debugger-agent-3.0.0.6-SNAPSHOT.jar