我正在尝试使用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"
}
]
}
答案 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()
,那应该这样做吗?