vagrant debug无法从主机访问调试端口8000

时间:2018-01-25 18:20:38

标签: java tomcat vagrant remote-debugging jdb

从主机到端口8000的连接不起作用(连接被拒绝),但本地调试在客户机上运行。

我在带有centos图像和自签名证书的流浪盒中运行tomcat 8.5。主机正在运行Windows 7.我可以使用https在安全端口8443上访问tomcat的管理器应用程序,我也可以使用https在安全端口8443上访问我的webapp。 8443未转发。非安全连接也可以在主机端口8080上运行,主机端口8080被转发到流浪盒上的访客端口80.

关闭tomcat后,bin/shutdown.sh并通过bin/catalina.sh jpda start以调试模式重新启动我可以通过jdb -attach 8000在端口8000上附加jdb,我可以查看线程和类,并在设置断点后并点击安全8443上的应用程序,我可以逐步执行。

我已尝试将主机端口9000转发到Vagrantfile中的来宾端口8000,并尝试在tomcat的bin / server.xml中设置各种连接器以允许端口8000上的连接。要允许远程连接,我必须添加上下文文件tomcat的conf / Catalina / localhost,以及tomcat管理器应用程序以及我的应用程序的以下文本:

<Context privileged="true" antiResourceLocking="false"
         docBase="${catalina.home}/webapps/manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
  </Context>

我觉得我可能需要为tomcat做一些其他东西才能在端口8000上进行远程连接,但是我无法通过几个小时的谷歌搜索和实验找到它。

1 个答案:

答案 0 :(得分:0)

我明白了。

在catalina.sh中,JPDA变量在if语句中设置。我允许这些变量定义如何连接。 JPDA_ADDRESS设置为JPDA_ADDRESS="localhost:8000"我删除了“localhost:”,因此它现在设置为JPDA_ADDRRESS="8000"。我现在可以从主机上的STS连接。下面是来自catalina.sh的if语句,我更改为允许在来宾机器外部进行连接。

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000" // only this line changed. was set to "localhost: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="$JPDA_OPTS $CATALINA_OPTS"
  shift
fi

catalina.sh可能不是更改JPDA_ADDRESS的最佳位置。其他帖子建议在setenv.sh中定义JPDA变量,或者使用适当的命令调用catalina.sh以在调试模式下启动的自定义脚本。

除了这个答案之外,我找到了另一个问题的答案,这个问题帮我弄清了什么是错的。 Antony Shumskikh对What are Java command line options to set to allow JVM to be remotely debugged?的回答很有帮助。