我在IBM Bluemix上部署了一个独立的Java应用程序,作为Cloud Foundry Java buildpack。
有没有办法在 Eclipse 中对它执行远程调试?我只能找到用于远程调试Java Liberty构建包应用程序的文档。
另一个答案中提到的套接字侦听方式当然很方便,但希望您有一个公共 IP 分配给调试机器(或者您必须在路由器上配置一些端口转发)。这可能并不总是可能的。
因此,另一种方法是在 Java 应用程序上启用调试,并使用 ssh 端口转发连接到应用程序实例。以下是步骤
- 通过设置具有值
{enabled: true}
的环境变量JBP_CONFIG_DEBUG
并重新启动应用程序来启用 Java 调试。 -
通过 JDWP 为调试框架设置 SSH 隧道
cf ssh -N -T -L 8000:localhost:8000 <APP_NAME>
-
打开 ssh 隧道后,您可以使用 eclipse on 的套接字附加调试类型
localhost:8000
cf ssh
前的先决条件:cf api
、cf login
、cf target
Java buildpack 文档中有一些说明,请访问 https://docs.cloudfoundry.org/buildpacks/java/java-tips.html#debugging
- 在 Eclipse 中打开您的项目。
- 右键单击项目,转到"调试方式",然后选择"调试配置"。
- 创建新的远程 Java 应用程序。 确保已选择
- 项目,从"连接类型"下拉列表中选择"标准(套接字侦听)"并设置端口。如果正在运行防火墙,请确保此端口已打开。
- 单击"调试"。
调试器现在应该正在运行。如果切换到"调试"透视图,应会看到"调试"面板中列出了您的应用程序,并且应显示Waiting for vm to connect at port
。
接下来,将您的应用程序推送到 Cloud Foundry,并指示 Cloud Foundry 使用以下说明连接到本地计算机上运行的调试器:
- 编辑清单 .yml 文件。将实例计数设置为 1。如果将此值设置为大于 1,则多个应用程序会尝试连接到调试器。
- 同样在 manifest.yml 中,添加 env 部分并创建一个名为 JAVA_OPTS 的变量。
- 将远程调试器配置添加到JAVA_OPTS变量:
-agentlib:jdwp=transport=dt_socket,address=YOUR-IP-ADDRESS:YOUR-PORT
。 - 保存清单 .yml 文件。
- 运行 cf push。
完成后,您应该看到应用程序已启动,现在已连接到 IDE 中运行的调试器。现在可以添加断点并询问应用程序,就像在本地运行时一样。