VS Code Java调试器参数

时间:2017-05-11 22:36:45

标签: java visual-studio-code vscode-tasks

我正在尝试使用VS Code debugger plugin进行调试。 我的程序在main方法中使用了一些命令行参数。调试器插件表示它支持参数,但我无法弄清楚如何将这些参数提供给调试器。

我创建了它建议的task.json,但如果我将args放在json的“args”字段中,则会出错。

这是我的tasks.json

{
"version": "0.1.0",
"command": "javac",
"isShellCommand": true,
"showOutput": "always",
"isWatching": true,
"suppressTaskName": true,
  "tasks": [
      {
          "taskName": "build",
          "args": ["-g", "${file}"]
      }
  ]
}

这是我的launch.json

{
"version": "0.2.0",
"configurations": [
    {
        "name": "Java",
        "type": "java",
        "request": "launch",
        "stopOnEntry": true,
        "cwd": "${fileDirname}",
        "startupClass": "${fileBasename}",
        "options": [
            "-classpath",
            "${workspaceRoot}:."
        ],
        "jdkPath": "/usr/lib/jvm/java-8-openjdk/bin"
    },
    {
        "name": "Java Console App",
        "type": "java",
        "request": "launch",
        "stopOnEntry": true,
        "cwd": "${fileDirname}",
        "startupClass": "${fileBasename}",
        "options": [
            "-classpath",
            "\"${fileDirname};.\""
        ],
        "externalConsole": true,
        "jdkPath": "/usr/lib/jvm/java-8-openjdk/bin"
    }
]
}

2 个答案:

答案 0 :(得分:0)

我无法让调试器为我工作......你能够点击断点吗?

至于传递args,您可以尝试将选项更改为:

"options": [ "-classpath", "${workspaceRoot}:." "${fileBasename}", // Or the name of your main class "arg1", "arg2" ],

在黑暗中射击,祝你好运!

答案 1 :(得分:0)

我一直在对此主题进行一些试验和错误,如果您重复startupClass中的options后跟您要传递的参数,那么调试器会参与并输入main()的{​​{1}},除非它使用额外的参数(startupClass的名称)。

在我的情况下,startupClass程序在检查参数数量后实际上出错了(它只是期望1),所以我做不了多少(不要控制​​我正在调试的源代码) ,但也许你可以?

以下是我main()

的相关摘录

launch.json

使用此 "startupClass":"org.my.startupClass" ... ... "options"[ "-classpath", "full/path/where/the/jar/containing/org.my.startupClass/resides;.", "org.my.startupClass", "arg1", "arg2" ... ... ] ,我会转到我要尝试运行的文件(launch.json args main()之一并点击{{1}成功将我带到org.my.startupClass内的暂停调试器。但是在检查args数组时,我看到两个条目。

如果我没有在F5的{​​{1}}部分中提到main(),我会在调试器控制台中收到错误:

startupClass

仅供参考,我使用的是VSCode 1.13.0和Java Debugger扩展0.1.0。

仔细看看source code,看来如果你在launch.json的args键下传递了options个参数,你只需要进行一行代码更改即可它的工作原理:

在方法launch.json中有一个 place ,您可以在其中构建传递给调试子进程的参数:

Error: Could not find or load main class arg1  如果您将另一个main()添加到private startProgramInDebugJavaMode(),那应该这样做吗?