{"record":{"id":"2e5e941267346d91","repo":"oracle/graal","slug":"invalid-jdwp-option-key-supported-options-tr","errorCode":null,"errorMessage":"Invalid JDWP option: {key}. Supported options: 'transport', 'address', 'server', 'suspend', and 'includevirtualthreads=n'.","messagePattern":"Invalid JDWP option: (.+?)\\. Supported options: 'transport', 'address', 'server', 'suspend', and 'includevirtualthreads=n'\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/EspressoOptions.java","lineNumber":464,"sourceCode":"                        if (!\"dt_socket\".equals(value)) {\n                            throw new IllegalArgumentException(\"Invalid transport \" + value + \". Espresso only supports dt_socket currently.\");\n                        }\n                        transport = value;\n                        break;\n                    case \"server\":\n                        server = yesOrNo(key, value);\n                        break;\n                    case \"suspend\":\n                        suspend = yesOrNo(key, value);\n                        break;\n                    case \"includevirtualthreads\":\n                        boolean includevirtualthreads = yesOrNo(key, value);\n                        if (includevirtualthreads) {\n                            throw new IllegalArgumentException(\"Invalid includevirtualthreads setting \" + value + \". Espresso only supports n currently.\");\n                        }\n                        break;\n                    default:\n                        throw new IllegalArgumentException(\"Invalid JDWP option: \" + key + \". Supported options: 'transport', 'address', 'server', 'suspend', and 'includevirtualthreads=n'.\");\n                }\n            }\n            return new JDWPOptions(transport, host, port, server, suspend);\n        }\n    });\n\n    @Option(help = \"JDWP agent Options. e.g. -agentlib:jdwp=transport=dt_socket,server=y,address=localhost:8000,suspend=y\", //\n                    category = OptionCategory.EXPERT, //\n                    stability = OptionStability.STABLE, //\n                    usageSyntax = \"[transport=dt_socket],[server=y|n],[address=[<host>:]<port>,[suspend=y|n]]\") //\n    public static final OptionKey<JDWPOptions> JDWPOptions = new OptionKey<>(null, JDWP_OPTIONS_OPTION_TYPE);\n\n    @Option(help = \"Enable experimental java.lang.management APIs. Incur a bookkeeping overhead.\", //\n                    category = OptionCategory.EXPERT, //\n                    stability = OptionStability.EXPERIMENTAL, //\n                    usageSyntax = \"true|false\") //\n    public static final OptionKey<Boolean> EnableManagement = new OptionKey<>(true);\n","sourceCodeStart":446,"sourceCodeEnd":482,"githubUrl":"https://github.com/oracle/graal/blob/a66e9ccd1d7bf2552883939aa0788dfd0e294aab/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/EspressoOptions.java#L446-L482","documentation":"The JDWP option parser switch only recognizes the keys transport, address, server, suspend, and includevirtualthreads. Any other key (e.g. 'launch', 'onthrow', 'timeout' supported by HotSpot JDWP) hits the default branch and throws with the list of supported keys.","triggerScenarios":"--java.JDWPOptions=...,timeout=5000 or onthrow=... or launch=... - all valid HotSpot JDWP keys unsupported by Espresso.","commonSituations":"Forwarding full HotSpot agentlib strings (e.g. from IDE configs or JAVA_TOOL_OPTIONS) to Espresso; scripts shared between native JVM and Espresso launches.","solutions":["Strip unsupported keys; keep only transport, address, server, suspend, includevirtualthreads.","Maintain a separate debugger profile for Espresso vs HotSpot.","Filter known-unsupported keys programmatically before constructing the option."],"exampleFix":"# before\n--java.JDWPOptions=transport=dt_socket,server=y,address=:8000,timeout=5000\n\n# after\n--java.JDWPOptions=transport=dt_socket,server=y,address=:8000","handlingStrategy":"validation","validationCode":"Set<String> supported = Set.of(\"transport\", \"address\", \"server\", \"suspend\", \"includevirtualthreads\");\nfor (String kv : opts.split(\",\")) {\n    String key = kv.substring(0, kv.indexOf('='));\n    if (!supported.contains(key)) throw new ConfigException(\"Unsupported JDWP key: \" + key);\n}","typeGuard":"static boolean onlySupportedKeys(String s) {\n    Set<String> ok = Set.of(\"transport\",\"address\",\"server\",\"suspend\",\"includevirtualthreads\");\n    for (String kv : s.split(\",\")) if (!ok.contains(kv.split(\"=\",2)[0])) return false;\n    return true;\n}","tryCatchPattern":null,"preventionTips":["Maintain a whitelist filter for JDWP keys when reusing IDE profiles.","Log the final JDWP string before launch for easier diagnosis."],"tags":["espresso","graalvm","jdwp","debugging","configuration"],"backgroundTag":null,"analyzedSha":"a66e9ccd1d7bf2552883939aa0788dfd0e294aab","analyzedAt":"2026-08-14T13:58:47.161Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}