Tomcat启动忽略调试的jpda选项

时间:2013-09-10 11:32:19

标签: java macos tomcat jpda

我试图在调试模式下运行Tomcat 7。如果我键入./catalina.sh jpda start tomcat,就好像jpda选项不在那里并输出:

Michaels-MacBook-Pro:bin clairewilgar$ ./catalina.sh jpda start
Using CATALINA_BASE:   /Users/clairewilgar/Downloads/apache-tomcat-7.0.42-MIS
Using CATALINA_HOME:   /Users/clairewilgar/Downloads/apache-tomcat-7.0.42-MIS
Using CATALINA_TMPDIR: /Users/clairewilgar/Downloads/apache-tomcat-7.0.42-MIS/temp
Using JRE_HOME:        /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Using CLASSPATH:       /Users/clairewilgar/Downloads/apache-tomcat-7.0.42-MIS/bin/bootstrap.jar:/Users/clairewilgar/Downloads/apache-tomcat-7.0.42-MIS/bin/tomcat-juli.jar

并且不会更改我的CATALINA_OPTS或其他任何内容。如果我尝试通过Eclipse连接,我会收到错误

  

'启动工作流'遇到了问题。无法连接到远程VM。连接被拒绝。

我已经尝试将端口更改为jpda端口为8001但没有成功,我尝试在调用catalina.sh之前在终端中声明JPDA选项,但这没有任何区别。我的catalina.sh JPDA行如下:

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

还有其他原因导致JPDA无法运行吗?我正在使用OSX(Mountain Lion),如果有任何与我可能错过的相关的内容。提前谢谢。

编辑:运行./catalina.sh jpda start的我的catalina.out文件位于http://pastebin.com/Z4GSvckr

5 个答案:

答案 0 :(得分:6)

如果从startup.sh启动它,会出现同样的问题吗?请记住,您可能需要修改startup.sh,以便使用catalina.sh参数调用jpda

您是否尝试手动设置变量?我从来没有遇到过这个问题,但我倾向于做一些像wiki中描述的那样的事情。

此外,如果您的环境中已经设置了上述变量,则不会在catalina.sh脚本(-z)中重置这些变量。

您还可以尝试在包含以下内容的setup.sh文件夹中添加bin

JPDA_TRANSPORT="dt_socket"
JPDA_ADDRESS="8000"
JPDA_SUSPEND="n"
JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"

通过此更改,您只需使用startup.sh start启动tomcat。

答案 1 :(得分:1)

可能是IPv4与IPv6的问题。

netstat -an | grep 8000

我曾遇到过无法连接到“localhost”端口13306的问题,但可以连接到“127.0.0.1”端口13306

localhost在进程正在侦听IPv4地址时映射到IPv6地址

答案 2 :(得分:0)

您可以在catlina.sh中更改此行:

if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
fi

到:

if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="y"
fi

或设置env-var" JPDA_SUSPEND"到" y" - 在致电catalina.sh之前

答案 3 :(得分:0)

我遇到了同样的问题,因为事实证明我的startup.sh文件包含以下几行:

exec "$PRGDIR"/"$EXECUTABLE" start "$@"

因此命令./startup.sh jpda start被发送到catalina.sh作为启动jpda start,因此调试选项被忽略,所以我不得不将此行更改为

exec "$PRGDIR"/"$EXECUTABLE" "$@"

此致 鲍里斯塔拉

答案 4 :(得分:0)

更改此文件的最后一行:"startup.sh""startup.bat"如果您使用的是Windows)

而不是使用它:

exec "$PRGDIR"/"$EXECUTABLE" start "$@"

使用此:

exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@"