两种远程调试方式

Two remote debugging methods

我有一个 ubuntu 服务器,我的应用在 tomcat7 中 运行。现在我有两种远程调试的方法,作为一个学习者我想知道这两者之间的技术区别是什么,或者它们是否相同而我遗漏了什么?

方法一:打开文件/etc/default/tomcat7

#To enable remote debugging uncomment the following line.

#You will then be able to use a java debugger on port 8000.
#JAVA_OPTS="${JAVA_OPTS} -Xdebug Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

方法二:

export CATALINA_HOME=/usr/share/tomcat7 export CATALINA_BASE=/var/lib/tomcat7/ export JPDA_ADDRESS=8090 export JRE_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64

now go to tomcat home folder /usr/share/tomcat7/bin and write the following line to run tomcat in debug mode.

#./catalina.sh jpda start

我遇到的关于方法 2 的另一件事是,当我启动 jpda 并且我的 tomcat 服务也在端口 80 上 运行 时,我得到 连接被拒绝 当我停止时 tomcat 我能够远程连接到 8090。为什么会这样?

从技术上讲,它们是相同的,指的是catalina.sh:

if [ "" = "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

关于你的第二个问题,当 shutdown.sh 停止 tomcat 时,jpda 端口仍在侦听,你可以使用 linux 命令 netstatlsof。我遇到了同样的问题,但不确定为什么 tomcat 没有处理它。

80端口连接被拒绝的错误可能与jpda选项无关。 jdwp 是一个 JVM 标志,不仅 tomcat 任何其他 java 应用程序都可以使用它。