You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jdb无法识别--add-reads选项,如何正确向jdb传递Java运行参数?

问题根因

jdb的参数分为两类:一类是jdb自身的调试控制参数,另一类是需要传递给被调试Java虚拟机的运行参数。你直接填写的--add-reads等JPMS模块参数属于JVM运行参数,jdb本身不会识别这类参数,直接传递的话会被jdb当成自身参数解析,因此抛出非法选项报错。

解决方法

有两种可选方案可以正确传递参数:

方案1:使用--分隔符

在jdb自身参数的末尾加上--分隔符,分隔符之后的所有内容会被直接传递给下层被调试JVM和主程序,不需要修改原有参数,修改后的命令如下:

/auto/tools/java/jdk-14.0.1/bin/jdb -- --add-reads stringtemplate=foostring  -p ./tools/foo:./tools/bar -m foo/com.bar.foo.FOO  -tp ./bar/ -p -o bin/foo -i foo.in

如果需要指定jdb自身的参数(比如源代码查找路径-sourcepath),将jdb参数放在--分隔符之前即可,示例:

/auto/tools/java/jdk-14.0.1/bin/jdb -sourcepath ./src -- --add-reads stringtemplate=foostring  -p ./tools/foo:./tools/bar -m foo/com.bar.foo.FOO  -tp ./bar/ -p -o bin/foo -i foo.in

方案2:为JVM参数添加-J前缀

给每个需要传递给被调试JVM的参数添加-J前缀,jdb会自动剥离该前缀后将剩余内容传递给下层JVM,修改后的命令如下:

/auto/tools/java/jdk-14.0.1/bin/jdb -J--add-reads -Jstringtemplate=foostring -J-p -J./tools/foo:./tools/bar -J-m -Jfoo/com.bar.foo.FOO -J-tp -J./bar/ -J-p -J-o -Jbin/foo -J-i -Jfoo.in

内容的提问来源于stack exchange,提问作者HardcoreHenry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:06:07