我正在尝试在调试模式下运行 Apache Tomcat 8.0.21。
当我发出命令时
sh catalina.sh jpda start
它给出了这个错误。
错误信息
错误:无法两次加载此 JVM TI 代理,请检查您的 java 命令行是否有重复的 jdwp 选项。初始化 VM 代理库时出错无法初始化:jdwp
任何人都可以帮忙吗?
我正在尝试在调试模式下运行 Apache Tomcat 8.0.21。
当我发出命令时
sh catalina.sh jpda start
它给出了这个错误。
错误信息
错误:无法两次加载此 JVM TI 代理,请检查您的 java 命令行是否有重复的 jdwp 选项。初始化 VM 代理库时出错无法初始化:jdwp
任何人都可以帮忙吗?
任何一个
unset CATALINA_OPTS
unset JPDA_ADDRESS
unset JPDA_OPTS
unset JPDA_TRANSPORT
catalina.sh jpda start
或者
# in .bashrc, .profile etc.
export CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -Djava.security.egd=file:/dev/urandom -Denv=dev -Xms1024M -Xmx2048M -XX:PermSize=256M -XX:MaxPermSize=768m"
# At your shell prompt
./startup.sh
解释
正如 Arnab 在评论中所说,如果您的 shell 配置包含提及 jdpw 的环境变量(例如CATALINA_OPTS
, JDPA_ADDRESS
, JPDA_OPTS
),只需./startup.sh
像您不尝试进行远程调试一样启动,脚本将从您的环境变量中选择 jdpw 选项。
catalina.sh jpda start
仅当您没有任何已指定远程调试端口的环境变量时,才应使用启动选项语法。这意味着方便,但如果您之前已将 shell 配置为支持 java 远程调试,您可能会混合使用这两种替代方法。
您可以像往常一样添加环境变量并运行tomcat
在这种情况下,调试端口为 8000
export CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
然后运行tomcat
sh ./catalina.sh start
当我尝试添加调试参数(-Xdebug -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y)时,Eclipse发生了这种情况,因此我可以在启动时暂停 Tomcat。不幸的是,我随后使用“调试”按钮启动了我的 Tomcat(在 Eclipse 中)。
为什么这是个问题
当您在调试模式下启动 Tomcat 时,Eclipse 本身会插入调试参数。当您在启动配置中有自己的调试参数时,您确实将它们传递了两次。
因此,如果您需要从 Eclipse 中启动 Tomcat 并在启动时将其挂起(以便您可以连接调试器),您需要:
- 将调试参数添加到启动配置的“Arguments -> VM arguments”框中,
然后运行此配置,而不是调试。
这样只会添加启动配置中的调试参数。
在“catalina.sh”中推荐了另一种方法:
“不要在此脚本中设置变量。而是将它们放入 CATALINA_BASE/bin 中的脚本 setenv.sh以保持您的自定义独立。”
对于 Windows,带有环境变量的文件名将是“setenv.bat”。