如何在调试模式下运行Apache Tomcat 8?

Tha*_*ipe 7 jvm remote-debugging jpda jdwp tomcat8

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

当我发出命令时

sh catalina.sh jpda start
Run Code Online (Sandbox Code Playgroud)

它给出了这个错误。

错误信息

错误:无法两次加载此JVM TI代理,请检查Java命令行中是否有重复的jdwp选项。VM代理库初始化期间发生错误,无法初始化:jdwp

有人可以帮忙吗?

sen*_*982 6

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

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

export CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
Run Code Online (Sandbox Code Playgroud)

然后运行tomcat

sh ./catalina.sh start
Run Code Online (Sandbox Code Playgroud)


Sri*_*bat 5

要么

unset CATALINA_OPTS
unset JPDA_ADDRESS
unset JPDA_OPTS
unset JPDA_TRANSPORT

catalina.sh jpda start
Run Code Online (Sandbox Code Playgroud)

要么

# 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
Run Code Online (Sandbox Code Playgroud)

说明

作为ARNAB在评论中说,如果你的shell配置包括环境变量提jdpw(如CATALINA_OPTSJDPA_ADDRESSJPDA_OPTS),只需启动使用./startup.sh,如果你不尝试做远程调试和脚本将拿起从你的环境变量jdpw选项。

catalina.sh jpda start仅当您没有已指定远程调试端口的任何环境变量时,才应使用启动选项语法。这样做很方便,但是如果您先前已将Shell配置为支持Java远程调试,则可能会混用这两种方法。


Jar*_*uba 2

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

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

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