2017-06-29 116 views

回答

1

有在Java buildpack文档中的某些指令在https://docs.cloudfoundry.org/buildpacks/java/java-tips.html#debugging

  1. 在Eclipse中打开您的项目。
  2. 右键单击您的项目,转到Debug as并选择Debug Configurations。
  3. 创建一个新的远程Java应用程序。
  4. 确保您的项目已被选中,从连接类型下拉菜单中选择标准(套接字侦听)并设置一个端口。如果您正在运行防火墙,请确保此端口已打开。
  5. 单击调试。

调试器现在应该正在运行。如果切换到Debug透视图,应该会看到您的应用程序在Debug面板中列出,并且应该显示Waiting for vm to connect at port

接下来,把你的应用程序到Cloud Foundry和指导的Cloud Foundry连接到使用下面的说明你的本地计算机上运行的调试器:

  1. 编辑您的manifest.yml文件。将实例计数设置为1.如果将其设置为大于1,则多个应用程序尝试连接到调试器。
  2. 同样在manifest.yml中,添加env节并创建一个名为JAVA_OPTS的变量。
  3. 将远程调试器配置添加到JAVA_OPTS变量:-agentlib:jdwp=transport=dt_socket,address=YOUR-IP-ADDRESS:YOUR-PORT
  4. 保存manifest.yml文件。
  5. 运行cf push。

完成后,您应该看到您的应用程序已启动并且现在已连接到在IDE中运行的调试器。现在,您可以像在本地运行一样添加断点并询问应用程序。

+0

它无法连接。 '传输错误202:连接失败:连接被拒绝 JDWP Transport dt_socket未能初始化,TRANSPORT_INIT(510) 退出错误AGENT_ERROR_TRANSPORT_INIT(197):没有传输初始化[debugInit.c:750]' – Caroh

1

在其他答案中提到的套接字监听方式当然很方便,但希望你有一个公共IP分配给你的调试机(或者你必须在你的路由器上配置一些端口转发)。这可能不总是可能的。

所以另一种方法是启用Java应用程序调试并使用ssh端口转发连接到应用程序实例。下面是步骤

  1. 与价值{enabled: true}设置环境变量JBP_CONFIG_DEBUG并重新启动应用程序启用Java调试。
  2. 通过JDWP

    cf ssh -N -T -L 8000:localhost:8000 <APP_NAME>

  3. 设置的SSH隧道调试框架SSH隧道打开后,可以使用socket上localhost:8000

附上月食调试类型前提条件cf sshcf api,cf login,cf target

+0

按照指示, https://discuss.pivotal.io/hc/en-us/articles/221317307-How-to-remotely-debug-Java-applications-on-PCF-但它失败了在这篇文章的第2步与“FAILED EOF” – Caroh

+0

请尝试使用云代工buildpack。 https://github.com/cloudfoundry/java-buildpack – Shiva

+0

@opiethehokie请尝试设置这个'JBP_CONFIG_DEBUG“{enabled:true,port:8000,suspend:false}”'环境变量,并尝试使用ssh检查8000端口是否打开或不。 – Shiva