Skip to content

Commit d5561e3

Browse files
committed
LDEV-1402 switch env var prefix to LUCEE_DAP_ ( was LUCEE_DEBUGGER_ )
1 parent 9d04ebc commit d5561e3

35 files changed

+47
-2110
lines changed

.github/workflows/test-dap.yml

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,13 @@ jobs:
190190
191191
- name: Configure debuggee setenv.sh
192192
run: |
193-
echo 'export LUCEE_DEBUGGER_SECRET=testing' >> debuggee/bin/setenv.sh
194-
echo 'export LUCEE_DEBUGGER_PORT=10000' >> debuggee/bin/setenv.sh
193+
echo 'export LUCEE_DAP_SECRET=testing' >> debuggee/bin/setenv.sh
194+
echo 'export LUCEE_DAP_PORT=10000' >> debuggee/bin/setenv.sh
195195
echo 'export LUCEE_LOGGING_FORCE_LEVEL=trace' >> debuggee/bin/setenv.sh
196196
# Enable Felix OSGi debug logging to diagnose bundle unload
197197
echo 'export FELIX_LOG_LEVEL=debug' >> debuggee/bin/setenv.sh
198198
# Enable luceedebug internal debug logging
199-
echo 'export LUCEE_DEBUGGER_DEBUG=true' >> debuggee/bin/setenv.sh
199+
echo 'export LUCEE_DAP_DEBUG=true' >> debuggee/bin/setenv.sh
200200
chmod +x debuggee/bin/setenv.sh
201201
202202
- name: Warmup debuggee (Lucee Express)
@@ -375,15 +375,22 @@ jobs:
375375
echo "AGENT_JAR=$AGENT_JAR" >> $GITHUB_ENV
376376
cp $AGENT_JAR debuggee/
377377
378+
- name: Upload agent JAR
379+
uses: actions/upload-artifact@v4
380+
with:
381+
name: luceedebug-agent
382+
path: luceedebug/build/libs/luceedebug-*.jar
383+
retention-days: 1
384+
378385
- name: Configure debuggee for agent mode
379386
run: |
380387
AGENT_JAR_NAME=$(basename $AGENT_JAR)
381388
# Add JVM args for JDWP and luceedebug agent
382389
# Secret is read from env var at connection time, not javaagent args
383-
echo "export LUCEE_DEBUGGER_SECRET=testing" >> debuggee/bin/setenv.sh
390+
echo "export LUCEE_DAP_SECRET=testing" >> debuggee/bin/setenv.sh
384391
echo "export LUCEE_LOGGING_FORCE_LEVEL=trace" >> debuggee/bin/setenv.sh
385392
# Enable luceedebug internal debug logging
386-
echo "export LUCEE_DEBUGGER_DEBUG=true" >> debuggee/bin/setenv.sh
393+
echo "export LUCEE_DAP_DEBUG=true" >> debuggee/bin/setenv.sh
387394
echo "export CATALINA_OPTS=\"\$CATALINA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=localhost:9999\"" >> debuggee/bin/setenv.sh
388395
echo "export CATALINA_OPTS=\"\$CATALINA_OPTS -javaagent:\$CATALINA_HOME/$AGENT_JAR_NAME=jdwpHost=localhost,jdwpPort=9999,debugHost=0.0.0.0,debugPort=10000,jarPath=\$CATALINA_HOME/$AGENT_JAR_NAME\"" >> debuggee/bin/setenv.sh
389396
chmod +x debuggee/bin/setenv.sh

extension/META-INF/MANIFEST.MF

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ id: FA79A831-7D30-4D8A-B7F300DECEB00001
33
name: "Luceedebug"
44
symbolic-name: "luceedebug"
55
description: "Native CFML debugger for VS Code - no Java agent required"
6-
version: "3.0.0"
6+
version: "3.0.0-BETA"
77
lucee-core-version: "7.1.0.6"
88
start-bundles: true
99
release-type: server
10-
startup-hook: [{"class": "luceedebug.extension.ExtensionActivator", "bundle-name": "luceedebug-osgi", "bundle-version": "3.0.0.0"}]
10+
startup-hook: [{"class": "luceedebug.extension.ExtensionActivator", "bundle-name": "luceedebug-osgi", "bundle-version": "3.0.0.0-BETA"}]

luceedebug/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,14 @@ tasks.jar {
8989
"Premain-Class" to "luceedebug.Agent",
9090
"Can-Redefine-Classes" to "true",
9191
"Bundle-SymbolicName" to "luceedebug-osgi",
92-
"Bundle-Version" to "3.0.0.0",
92+
"Bundle-Version" to "3.0.0.0-BETA",
9393
"Export-Package" to "luceedebug.*"
9494
)
9595
)
9696
}
9797
}
9898

99-
val luceedebugVersion = "3.0.0"
99+
val luceedebugVersion = "3.0.0-BETA"
100100
val libfile = "luceedebug-" + luceedebugVersion + ".jar"
101101

102102
// TODO: this should, but does not currently, participate in the `clean` task, so the generated file sticks around after invoking `clean`.

luceedebug/src/main/java/luceedebug/DapServer.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -354,9 +354,10 @@ public CompletableFuture<Capabilities> initialize(InitializeRequestArguments arg
354354
c.setSupportsLogPoints(false); // still shows UI for it though
355355

356356
// Native-mode-only capabilities (require Lucee 7.1+ DebuggerRegistry)
357-
boolean isNativeMode = luceeVm_ instanceof NativeLuceeVm;
357+
// Also check if debugger is actually enabled (LUCEE_DAP_BREAKPOINT not set to false)
358+
boolean isNativeMode = luceeVm_ instanceof NativeLuceeVm && EnvUtil.isDebuggerEnabled();
358359

359-
// Exception breakpoint filters - only supported in native mode
360+
// Exception breakpoint filters - only supported in native mode with debugger enabled
360361
if (isNativeMode) {
361362
var uncaughtFilter = new ExceptionBreakpointsFilter();
362363
uncaughtFilter.setFilter("uncaught");
@@ -529,7 +530,7 @@ private boolean validateSecret(Map<String, Object> args) {
529530
if (expectedSecret == null) {
530531
// No secret configured on server - allow any secret for backwards compatibility?
531532
// No - require secret to be set for security
532-
Log.error("LUCEE_DEBUGGER_SECRET not set on server");
533+
Log.error("LUCEE_DAP_SECRET not set on server");
533534
return false;
534535
}
535536

luceedebug/src/main/java/luceedebug/EnvUtil.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,37 +22,49 @@ public static String getSystemPropOrEnvVar(String propertyName) {
2222
if (value != null && !value.isEmpty()) {
2323
return value;
2424
}
25-
// Try env var (lucee.debugger.port -> LUCEE_DEBUGGER_PORT)
25+
// Try env var (lucee.dap.port -> LUCEE_DAP_PORT)
2626
String envName = propertyName.toUpperCase().replace('.', '_');
2727
return System.getenv(envName);
2828
}
2929

3030
/**
31-
* Get debugger secret from environment/system property.
32-
* Checks "lucee.debugger.secret" / "LUCEE_DEBUGGER_SECRET".
31+
* Get DAP secret from environment/system property.
32+
* Checks "lucee.dap.secret" / "LUCEE_DAP_SECRET".
3333
*
3434
* @return the secret, or null if not set (debugger disabled)
3535
*/
3636
public static String getDebuggerSecret() {
37-
String secret = getSystemPropOrEnvVar("lucee.debugger.secret");
37+
String secret = getSystemPropOrEnvVar("lucee.dap.secret");
3838
if (secret != null && !secret.trim().isEmpty()) {
3939
return secret.trim();
4040
}
4141
return null;
4242
}
4343

4444
/**
45-
* Check if debugger is enabled (secret is set).
45+
* Check if DAP breakpoint support is enabled.
46+
* Reads ConfigImpl.DEBUGGER static field via reflection to match Lucee's state.
4647
*
47-
* @return true if debugger secret is configured
48+
* @return true if DAP breakpoint support is enabled
4849
*/
4950
public static boolean isDebuggerEnabled() {
50-
return getDebuggerSecret() != null;
51+
try {
52+
Class<?> configImpl = Class.forName("lucee.runtime.config.ConfigImpl");
53+
java.lang.reflect.Field field = configImpl.getField("DEBUGGER");
54+
return (boolean) field.get(null);
55+
} catch (Exception e) {
56+
// Fallback to env var check if reflection fails (e.g. older Lucee)
57+
if (getDebuggerSecret() == null) {
58+
return false;
59+
}
60+
String bp = getSystemPropOrEnvVar("lucee.dap.breakpoint");
61+
return bp == null || "true".equalsIgnoreCase(bp.trim());
62+
}
5163
}
5264

5365
/**
54-
* Get debugger port from environment/system property.
55-
* Checks "lucee.debugger.port" / "LUCEE_DEBUGGER_PORT".
66+
* Get DAP port from environment/system property.
67+
* Checks "lucee.dap.port" / "LUCEE_DAP_PORT".
5668
* Defaults to 9999 if secret is set but port is not.
5769
*
5870
* @return the port number, or -1 if debugger disabled (no secret)
@@ -62,7 +74,7 @@ public static int getDebuggerPort() {
6274
if (getDebuggerSecret() == null) {
6375
return -1;
6476
}
65-
String port = getSystemPropOrEnvVar("lucee.debugger.port");
77+
String port = getSystemPropOrEnvVar("lucee.dap.port");
6678
if (port == null || port.isEmpty()) {
6779
return 9999; // default port
6880
}

luceedebug/src/main/java/luceedebug/coreinject/frame/NativeDebugFrame.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,9 +355,9 @@ private static synchronized boolean initReflection( ClassLoader luceeClassLoader
355355
}
356356

357357
try {
358-
// Check if debugger is enabled (via LUCEE_DEBUGGER_SECRET env var)
358+
// Check if DAP debugger is enabled (via LUCEE_DAP_SECRET env var)
359359
if ( !EnvUtil.isDebuggerEnabled() ) {
360-
Log.info( "Native frame support disabled: LUCEE_DEBUGGER_SECRET not set" );
360+
Log.info( "Native frame support disabled: LUCEE_DAP_SECRET not set" );
361361
nativeFrameSupportAvailable = false;
362362
return false;
363363
}

luceedebug/src/main/java/luceedebug/extension/ExtensionActivator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public ExtensionActivator(Config luceeConfig) {
4444
// Get debug port - if not set, debugger is disabled
4545
int debugPort = EnvUtil.getDebuggerPort();
4646
if (debugPort < 0) {
47-
Log.info("Debugger disabled - set LUCEE_DEBUGGER_SECRET to enable");
47+
Log.info("Debugger disabled - set LUCEE_DAP_SECRET to enable");
4848
return;
4949
}
5050
Log.info("Extension activating");

0 commit comments

Comments
 (0)