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