【问题标题】:VS Code Java debugger argumentsVS Code Java 调试器参数
【发布时间】:2017-05-11 22:36:45
【问题描述】:

我正在尝试使用 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"
    }
]
}

【问题讨论】:

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


    【解决方案1】:

    我无法让调试器为我工作...你能在 atm 中打断点吗?

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

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

    有点像在黑暗中开枪,祝你好运!

    【讨论】:

      【解决方案2】:

      我一直在对这个主题进行一些试验和错误,似乎如果您在 options 中重复 startupClass 后跟要传递的参数,那么调试器会参与并输入 main() 的你的startupClass 只是它带有一个额外的参数(你的startupClass 的名称)。

      在我的情况下,main() 程序在检查参数数量后实际上会出错(它只需要 1 个),所以除此之外我无能为力(不要控制​​我正在调试的源代码),但是也许你可以?

      以下是我的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,我转到我试图运行的文件(这是org.my.startupClassargs 之一,然后点击F5,这成功让我暂停main() 中的调试器。但是在检查 args 数组时,我看到了两个条目。

      如果我没有在launch.jsonoptions 部分中提及startupClass,我会在调试器控制台中收到错误消息:

      Error: Could not find or load main class arg1

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

      仔细查看source code,看来如果您在launch.json 的args 键下传递main() 参数,您只需更改一行代码即可使其工作:

      在方法private startProgramInDebugJavaMode() 中有一个地方,您可以在其中构建要传递给调试子进程的参数:

      var javaPath = (!this.args.jdkPath || this.args.jdkPath.length === 0) ? "java" : path.join(this.args.jdkPath, "java"); var options = this.args.options; var args = [-agentlib:jdwp=transport=dt_socket,server=y,address=${port}].concat(options).concat(this.className); 如果您将另一个.concat(this.args.args) 附加到var arg,那应该这样做吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        • 1970-01-01
        • 2020-12-16
        • 2020-09-11
        • 2022-10-14
        • 1970-01-01
        相关资源
        最近更新 更多