Jvm 如何在调试模式下运行ApacheTomcat8?

Jvm 如何在调试模式下运行ApacheTomcat8?,jvm,remote-debugging,tomcat8,jpda,jdwp,Jvm,Remote Debugging,Tomcat8,Jpda,Jdwp,我试图在调试模式下运行ApacheTomcat8.0.21 当我发出命令时 sh catalina.sh jpda start 它给出了这个错误 错误消息 错误:无法加载此JVM TI代理两次,请检查java命令 重复jdwp选项的行。初始化过程中发生错误 虚拟机代理库的初始化失败:jdwp 有人能帮忙吗?当我试图添加调试参数(-Xdebug-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y)以便在启动时挂起To

我试图在调试模式下运行ApacheTomcat8.0.21

当我发出命令时

sh catalina.sh jpda start
它给出了这个错误

错误消息

错误:无法加载此JVM TI代理两次,请检查java命令 重复jdwp选项的行。初始化过程中发生错误 虚拟机代理库的初始化失败:jdwp


有人能帮忙吗?

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

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

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

这样,只会添加启动配置中的调试参数。

或者

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

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\u OPTS
JDPA\u ADDRESS
JPDA\u OPTS
),只要使用
/startup.sh
启动,就好像您没有尝试进行远程调试一样,脚本将从您的环境变量中选择jdpw选项


仅当您没有任何已指定远程调试端口的环境变量时,才应使用启动选项语法catalina.sh jpda start。这是为了方便起见,但是如果您之前已经将shell配置为支持java远程调试,那么您可能混合了这两种可选方法。

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

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

export CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
然后运行雄猫

sh ./catalina.sh start

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

“不要在此脚本中设置变量,而是将它们放入脚本中 setenv.sh位于CATALINA_BASE/bin中,以保持您的定制分离。”


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

您是否也在Java选项中使用此选项:-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y?如果是,则无需使用jpda启动tomcat(sh catalina.sh jpda start),在不使用jpda选项的情况下启动它。是。我正在使用这种方法。请不要在启动tomcat时使用jpda。