vscode-java-debug
vscode-java-debug copied to clipboard
Setting shortenCommandLine "argfile" should not nest a user-passed argfile inside an argfile
When setting shortenCommandLine
to argfile
(or setting to auto
and then triggering the argfile behavior with a long command), VS Code will always put any vmArgs
inside an argfile, even if the only VM arg is another argfile. This breaks run configurations that pass a user-generated argfile that still trigger the automatic CLI shortening behavior such as a very long classpath, since argfiles cannot be nested.
Environment
- Operating System: Linux
- JDK version: 17
- Visual Studio Code version: 1.84.0-insider (
60182c7e1a666961ded4d0319c154f52d85daf30
) - Java extension version: v0.25.15
- Java Debugger extension version: v0.54.0
Steps To Reproduce
- Create a trivial Java project ex. a Hello World main method
- Create an argfile
myargs
- Create
launch.json
with a corresponding run configuration for the main method. SetshortenCommandLine
toargfile
to force the argfile behavior (should be equivalent to settingauto
and then loading a very long classpath).
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Hello",
"request": "launch",
"mainClass": "Hello",
"vmArgs": "@myargs",
"shortenCommandLine": "argfile"
}
]
}
- Attempt to run the main method - this should fail.
Sample project: test-argfile.tar.gz
Current Result
$ /usr/bin/env /path/to/jdk @/tmp/cp_7ifzraqswz8cni6w2z8m6nw3w.argfile Hello
Error: Could not find or load main class @myargs
Caused by: java.lang.ClassNotFoundException: @myargs
/tmp/cp_7ifzraqswz8cni6w2z8m6nw3w.argfile
contents:
@myargs -XX:+ShowCodeDetailsInExceptionMessages -cp "/home/justinw/.vscode-server-insiders/data/User/workspaceStorage/-2d922411/redhat.java/jdt_ws/test-argfile_31bc6c61/bin"
Expected Result
Program should execute and argfiles should not be nested
Additional Informations
Pls set "shortenCommandLine": "none"
as a workaround.
Pls set
"shortenCommandLine": "none"
as a workaround.
Yes, this works pretty well 😄
However, the reason the shortenCommandLine
is getting triggered is because the CLI is getting long, and some projects with sufficiently long vmArgs + classpaths will end up triggering "Argument list too long" errors. This can typically be solved by putting the vmArgs directly into launch.json
instead of an argfile, but this isn't always an option for us.