(十)Intellij 远程调试 a bug

本文介绍了在使用IntelliJ IDEA远程调试Tomcat时遇到的问题及解决方案。当默认端口8000被占用,通过修改catalina.sh文件配置,设置新的JPDA端口避免冲突。同时,解析了catalina.sh中的相关代码段,指出在CATALINA_OPTS已包含远程调试配置时,再次执行`./catalina.sh jpda start`会导致错误,解决方法是删除重复的配置或使用默认的8000端口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   接上篇文章:http://blog.youkuaiyun.com/lovesummerforever/article/details/50327445

   经常使用第一种远程调试方法,也就是不改动任何的配置文件,使用jpda默认端口8000,linux启动方式./catalina.sh jpda start ,报错误如下所示。


ERROR: Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options.
Disconnected from server
Error occurred during initialization of VM
agent library failed to init: jdwp


   经查询错误如下:http://stackoverflow.com/questions/5993359/running-project-from-intellij-idea


   根据网上的提示,修改了catalina.sh 文件中的配置,配置如下

CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=10.255.223.148 -Dcom.sun.management.jmxremote.port=20152 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8001"


   经查看可知,是别人已经设置了jpda默认的启动端口8001,也就是第二种设置方式,这样直接启动tomcat的时候就已经启动了远程调试,而此时如果再使用这种方式./catalina.sh jpda start 启动,则相当于jpda端口已经被8001占用,因为这种方式默认启动的端口是8000。经过查看catalina.sh文件可以看到对一些参数的定义,如下所示。

 CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   "run" or "debug" command is executed.
#                   Include here and not in JAVA_OPTS all options, that should
#                   only be used by Tomcat itself, not by the stop process,
#                   the version command etc.
#                   Examples are heap size, GC logging, JMX ports etc.




#   JPDA_OPTS       (Optional) Java runtime options used when the "jpda start"
#                   command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
#                   and JPDA_SUSPEND are ignored. Thus, all required jpda
#                   options MUST be specified. The default is:
#
#                   -agentlib:jdwp=transport=$JPDA_TRANSPORT,
#                       address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND


#   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"
#                   command is executed. The default is 8000.



   执行catalina.sh 中有如下代码


if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi


   所以当CATALINA_OPTS中已经配置了-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8001,再用./catalina.sh jpda start 启动就会重复操作,导致报错,解决办法就是删掉-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8001 中这句话配置,用./catalina.sh.jpda start启动,这样远程端口号默认为8000,否则就直接启动,使用的端口号为CATALINA_OPTS 中手动配置的8001。


总结:

   不运动不行啊,有规律的运动,有规律的生活~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值