9

我正在尝试在调试模式下运行 Apache Tomcat 8.0.21。

当我发出命令时

sh catalina.sh jpda start

它给出了这个错误。

错误信息

错误:无法两次加载此 JVM TI 代理,请检查您的 java 命令行是否有重复的 jdwp 选项。初始化 VM 代理库时出错无法初始化:jdwp

任何人都可以帮忙吗?

4

4 回答 4

9

任何一个

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 远程调试,您可能会混合使用这两种替代方法。

于 2017-06-29T20:45:49.107 回答
7

您可以像往常一样添加环境变量并运行tomcat

在这种情况下,调试端口为 8000

export CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

然后运行tomcat

sh ./catalina.sh start
于 2017-07-10T04:57:12.197 回答
2

当我尝试添加调试参数(-Xdebug -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y)时,Eclipse发生了这种情况,因此我可以在启动时暂停 Tomcat。不幸的是,我随后使用“调试”按钮启动了我的 Tomcat(在 Eclipse 中)。

为什么这是个问题
当您在调试模式下启动 Tomcat 时,Eclipse 本身会插入调试参数。当您在启动配置中有自己的调试参数时,您确实将它们传递了两次。

因此,如果您需要从 Eclipse 中启动 Tomcat 并在启动时将其挂起(以便您可以连接调试器),您需要:
- 将调试参数添加到启动配置的“Arguments -> VM arguments”框中,
然后运行此配置,而不是调试。
这样只会添加启动配置中的调试参数。

于 2016-06-03T08:07:01.750 回答
0

在“catalina.sh”中推荐了另一种方法:

“不要在此脚本中设置变量。而是将它们放入 CATALINA_BASE/bin 中的脚本 setenv.sh以保持您的自定义独立。”

对于 Windows,带有环境变量的文件名将是“setenv.bat”。

于 2019-06-04T06:55:29.007 回答