0

我在 IBM Bluemix 上部署了一个独立的 Java 应用程序作为 Cloud Foundry Java buildpack。

有没有办法在 Eclipse 中对其执行远程调试?我只能找到用于远程调试 Java Liberty buildpack 应用程序的文档。

4

2 回答 2

2

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

因此,另一种方法是在您的 Java 应用程序上启用调试并使用 ssh 端口转发连接到应用程序实例。以下是步骤

  1. JBP_CONFIG_DEBUG通过使用值 设置环境变量{enabled: true}并重新启动应用程序来启用 java 调试。
  2. 通过 JDWP 为调试框架设置 SSH 隧道

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

  3. 打开 ssh 隧道后,使用 Eclipse 上的 Socket Attach 调试类型localhost:8000

之前的先决条件cf ssh: cf api, cf login,cf target

于 2017-06-30T12:26:42.997 回答
1

Java buildpack 文档中有一些说明,位于https://docs.cloudfoundry.org/buildpacks/java/java-tips.html#debugging

  1. 在 Eclipse 中打开您的项目。
  2. 右键单击您的项目,转到 Debug as 并选择 Debug Configurations。
  3. 创建一个新的远程 Java 应用程序。
  4. 确保您的项目被选中,从 Connection Type 下拉列表中选择 Standard (Socket Listen) 并设置端口。如果您正在运行防火墙,请确保此端口已打开。
  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 推送。

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

于 2017-06-29T16:56:39.853 回答