使用 Eclipse 或其他方式在 Linux 目标上进行 Java 远程调试

Posted

技术标签:

【中文标题】使用 Eclipse 或其他方式在 Linux 目标上进行 Java 远程调试【英文标题】:Java remote debugging on linux target using Eclipse or otherwise 【发布时间】:2014-09-18 23:50:05 【问题描述】:

谁能告诉我在 linux 目标上远程调试 Java 的好方法?

我所追求的是一些方法来构建我的 Java 项目,部署到目标,然后在目标上进行调试。 我知道 java 可以通过使用调试标志启动正在运行的 JAR 来调试目标 例如

java -Xdebug -Xrunjdwp:transport=dt_socket,address=8001,server=y suspend=y -jar stockTradingGUI.jar

但我不知道如何触发构建的 JAR 部署到目标并通过 Eclipse 以调试模式运行。

有人有什么想法吗?

谢谢

【问题讨论】:

您是在某个服务器上运行代码(例如 tomcat)还是一个独立的可执行 JAR? 如果您没有适配器帮助您,您可以在本地构建,复制到目标,可选择重新启动远程 JVM,然后附加。这通常相当乏味 - 所以如果可能的话,看看你是否可以在本地运行的服务器实例上将工作流程更改为 develop,并且只在远程服务器上进行 test跨度> Pat - 我正在运行一个独立的可执行 JAR Thorbjørn Ravn Andersen - 是的,这是我的工作流程(本地构建、复制到目标、在调试模式下开始构建并附加)。我在 Raspberry PI 上使用 GPIO,这就是为什么我不能完全在本地开发。 【参考方案1】:

使用 Eclipse 本身,通常不会尝试将构建的 JAR 部署到目标并让它在调试模式下运行。相反,在部署新构建的 jar 并使用各种调试/挂起标志启动它以允许您远程连接到它之后,可以在 Eclipse 中启动远程调试会话。

进行部署的方法有很多种。

最直接的方法是简单地在 Eclipse 中进行常规内置(或通过 ant 在命令行中或使用您正在使用的任何构建工具),手动 scp 将 jar 移到远程位置,然后 ssh 进入盒子并使用必要的命令启动应用程序。

另一种选择是使用部署框架,例如 fabric(用 Python 编写)来进行构建,scp您的远程位置,然后运行您需要运行的任何命令以使其启动并运行(即首先停止现有的 Tomcat 实例等或任何情况)。你可以在fabfile中设置不同的环境,比如debugprod,所以你可以部署在debug 模式适用于您现在正在寻找的情况,然后在 prod 模式下它会正常部署并运行。

如果您使用的是 Gradle,它有一些工具,例如 Cargo,可以帮助进行远程部署,或者对于更简单的用例,使用 ssh 插件和更直接地管理事物(有关更多详细信息,请参阅http://java.dzone.com/articles/replace-your-scripts-gradle)。

根据 OP 的评论进行编辑:

我自己没有使用过Remote System Explorer,但在某种程度上它似乎是extensible(请参阅服务和子系统层),尽管从根本上说它似乎仍然以 UI 为中心.

对于这种用例,我建议再看一下 Gradle,因为它专注于构建,非常可扩展,并且可以集成到 Eclipse 中或完全运行在命令行上。

【讨论】:

我希望有某种 Eclipse 插件可以处理构建后的部署,但您对 Gradle 或 Fabric 的想法可能会成功。你知道像 Eclipse Remote System Explorer 这样的东西是否完全可以编写脚本?

以上是关于使用 Eclipse 或其他方式在 Linux 目标上进行 Java 远程调试的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 linux 上创建 iscsi 目标?

Eclipse导入已有的项目后项目报错的解决办法

Ubuntu 16.04安装Eclipse并创建桌面快捷方式

在linux中Eclipse的使用总结

eclipse 错误;找不到或无法加载主类

Linux命令学习之路——变更工作目录:cd