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

时间:2015-05-03 07:55:04

标签: jvm remote-debugging tomcat8 jpda jdwp

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

当我发出命令时

cv::imencode

它给出了这个错误。

错误消息

  

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

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:5)

<强>要么

static

unset CATALINA_OPTS
unset JPDA_ADDRESS
unset JPDA_OPTS
unset JPDA_TRANSPORT

catalina.sh jpda start

说明

正如Arnab在评论中所说,如果您的shell配置包含提及jdpw的环境变量(例如# 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 CATALINA_OPTSJDPA_ADDRESS),则只需使用JPDA_OPTS启动如果您没有尝试进行远程调试,脚本将从环境变量中选择jdpw选项。

只有在没有任何已指定远程调试端口的环境变量时,才应使用启动选项语法./startup.sh。它本来是方便的,但如果您之前已经配置了shell来支持Java远程调试,那么您可能会混合使用两种替代方法。

答案 1 :(得分:2)

当我尝试添加调试参数(-Xdebug -agentlib:jdwp = transport = dt_socket,address = 8000,server = y,suspend = y)时,我发现使用Eclipse ,所以我可以暂停Tomcat的开始。不幸的是,我随后使用Debug按钮启动了我的Tomcat(在Eclipse中)。

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

因此,如果您需要从Eclipse中启动Tomcat并在启动时暂停它(因此您可以连接调试器),您需要:
  - 将调试参数添加到&#34; Arguments - &gt; VM参数&#34;启动配置框,
  - 然后运行此配置,而不是调试 这样只会添加启动配置中的调试参数。

答案 2 :(得分:2)

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

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

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

然后运行tomcat

sh ./catalina.sh start

答案 3 :(得分:0)

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

“请勿在此脚本中设置变量。而应将其放入脚本中 CATALINA_BASE / bin中的 setenv.sh ,以使您的自定义项保持独立。”

对于Windows,带有环境变量的文件名为'setenv.bat'。