microsoft / microsoft/vscode-java-debug

Setting shortenCommandLine "argfile" should not nest a user-passed argfile inside an argfile

Open
#1,403 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

ai-triaged bug enhancement
Dominant language
TypeScript
Stars
591
Forks
429
Avg merge
1d 9h
Merged PRs (30d)
19

Description

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
  1. Create a trivial Java project ex. a Hello World main method
  2. Create an argfile myargs
  3. Create launch.json with a corresponding run configuration for the main method. Set shortenCommandLine to argfile to force the argfile behavior (should be equivalent to setting auto 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"
        }
    ]
}
  1. 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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the Java launch configuration using vmArgs, shortenCommandLine, and the user-created myargs file, then reproduce the failure with the supplied Hello World steps. Trace how the debugger builds the temporary argfile; done means the program executes without nesting the user-passed argfile.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, typescript, vscode
Domain
devtools, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.