microsoft / vscode-java-test

Run and debug Java test cases in Visual Studio Code.
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-test
Other
298 stars 129 forks source link

failed to launch debuggee VM. Filename or Extension is too long. args too long? #1717

Open dsimonow opened 3 months ago

dsimonow commented 3 months ago

Hi, I am trying to get our maven multi project to run in VSCode. One Package fails and throws this error:

Juli 30, 2024 6:01:44 PM org.apache.aries.spifly.BaseActivator log
INFORMATION: Registered provider ch.qos.logback.classic.servlet.LogbackServletContainerInitializer of service jakarta.servlet.ServletContainerInitializer in bundle ch.qos.logback.classic
Juli 30, 2024 6:01:44 PM org.apache.aries.spifly.BaseActivator log
INFORMATION: Registered provider ch.qos.logback.classic.spi.LogbackServiceProvider of service org.slf4j.spi.SLF4JServiceProvider in bundle ch.qos.logback.classic
Juli 30, 2024 6:03:01 PM com.microsoft.java.debug.plugin.internal.JavaDebuggerServerPlugin start
INFORMATION: Starting com.microsoft.java.debug.plugin
Juli 30, 2024 6:03:01 PM com.microsoft.java.debug.plugin.internal.LogUtils configLogLevel
INFORMATION: Set log level to : FINE
Juli 30, 2024 6:03:40 PM com.microsoft.java.debug.plugin.internal.Compile compile
INFORMATION: Time cost for ECJ: 39098ms
Juli 30, 2024 6:03:40 PM com.microsoft.java.debug.core.UsageDataSession recordInfo
INFORMATION: launch debug info
Juli 30, 2024 6:03:40 PM com.microsoft.java.debug.core.adapter.handler.LaunchRequestHandler launch
INFORMATION: Trying to launch Java Program with options:
main-class: com.microsoft.java.test.runner.Launcher
args: 53015 testng (Alot of method names that I can't share. Editor says 175735 characters)
module-path: 
class-path: 
vmArgs:  "@C:\Users\simonow\AppData\Local\Temp\cp_7m7fi6jj88wslefmewdwqipfm.argfile"
[Error - 6:03:40 PM] 30.07.2024, 18:03:40 [error response][launch]: Failed to launch debuggee VM. Reason: java.io.IOException: Cannot run program "C:\Program Files\Eclipse Adoptium\jdk-11.0.24.8-hotspot\bin\java.exe" (in directory "C:\Dev\Projekte\Repos\project-name\project-name-web\project-name-web-ui"): CreateProcess error=206, Der Dateiname oder die Erweiterung ist zu lang
Failed to launch debuggee VM. Reason: java.io.IOException: Cannot run program "C:\Program Files\Eclipse Adoptium\jdk-11.0.24.8-hotspot\bin\java.exe" (in directory "C:\Dev\Projekte\Repos\project-name\project-name-web\project-name-web-ui"): CreateProcess error=206, Der Dateiname oder die Erweiterung ist zu lang
com.microsoft.java.debug.core.DebugException: Failed to launch debuggee VM. Reason: java.io.IOException: Cannot run program "C:\Program Files\Eclipse Adoptium\jdk-11.0.24.8-hotspot\bin\java.exe" (in directory "C:\Dev\Projekte\Repos\project-name\project-name-web\project-name-web-ui"): CreateProcess error=206, Der Dateiname oder die Erweiterung ist zu lang

the generated argfile has about 15k characters and starts with -ea -Dfile.encoding=UTF-8 -cp "..."

Sorry for the german in there. "Der Dateiname oder die Erweiterung ist zu lang" is basically "Filename or Extension is too long"

I tried all of the launch.json Settings for shortenCommandLine, this itteration tries it with the argfile.

I also attempted to relocate the jdk and had it at one point at C:\jdk and it didn't matter either. I know these Tests work, since they do work in Eclipse and Intellij I am just trying to make it work in vscode.

I am assuming the extremely long args is causing the issue, since that specific project has probably most of our tests and the others seem to work. Now how would I resolve that since it does work in other IDEs? Also I don't think our project is that unique in the amount of tests we have, we are still a rather young project in terms of javaee development.

jdneo commented 3 months ago

It's because here https://github.com/microsoft/vscode-java-test/blob/ad4b37c7529e4a6825bd1f8ceb545ee783e7c837/src/utils/launchUtils.ts#L27

When the extension tries to construct the launch configuration for debug, the shortedCommandLine is not supported. Maybe to solve this problem, we should expose this configuration to vscode settings from debugger extension.

jdneo commented 3 months ago

Or another quick fix is always enable shortenCommandLine

jdneo commented 3 months ago

Hi @dsimonow, could you please try this to see if it fixes your problem: extension.vsix.zip

dsimonow commented 3 months ago

thank you for the fast reply. Sadly this doesn't change it. Like in the stacktrace it seems to use an argfile which I think is a command shortening strategy.

I tried more testing and I think it has something to do with the strategy of the Test Explorer itself. It seems to go per package and attempts to summarize everything inside. Instead of working through them, which causes apparently these too long args.

It causes the error when I used the top most button to basically test everything and it reaches the package with the large amount of tests but also fails instantly if I try to test the package with too many tests inside. While going through them each inside the package doesn't cause the error.

Are there ways to adjust the strategy of the test runner? accept more time by it going through the packages instead of summarizing them?

jdneo commented 3 months ago

Ah I see. Sorry I misunderstood the issue at first. So it's the argument length too long.

Then I need to check if I can fold the argument. For example, if all the classes under the same package are being tested, then fold the class fully qualified names to the belonging package name