ChatGPT解决这个技术问题 Extra ChatGPT

通过 SSH 使用 Eclipse 处理远程项目

我有以下盒子:

a) 一个带有 Eclipse CDT 的 Windows 机器,b) 一个 Linux 机器,我只能通过 SSH 访问。

编译器和构建和运行我的项目所需的硬件都只在机器 B 上。

我想使用 Eclipse CDT 从该项目的 Windows 框中“透明地”工作,并能够从 IDE 中远程构建、运行和调试项目。

我该如何设置:

大楼能用吗?有什么比编写本地生成文件更简单的解决方案来同步项目,然后调用远程生成文件来启动实际构建? Eclipse 托管构建是否具有此功能?

调试会起作用吗?

最好 - Eclipse CDT 代码索引会起作用吗?我是否必须将所有必需的头文件从机器 B 复制到机器 A 并手动将它们添加到包含路径?

Kos,你最终使用 RSE 了吗?你的经历如何?
我设法做到了,但是:a)CDT 在了解虚拟文件系统方面遇到了一些问题(AFAIK,这是一个临时问题,当他们将一些东西重写为更新的 API 时会消失;也许他们已经这样做了?IDK)和b) 我不得不卷起我自己的编译链(通过自定义 makefile)和 c) 一个令人不快的烦恼——文件保存大约需要 2~3 秒,这令人不安。
如果我今天需要再次远程工作,我可能会再次使用 RSE,但我可能会发现将其保留为本地项目并汇总基于例如 rsync 的自定义构建系统更可行我提过。
不幸的是 - 我还没有设法设置远程库头的远程调试或索引。我怀疑后者甚至可以做到。前者 - 我很肯定它可以,但我真的不需要深入研究它。
我首先登录到登录服务器,然后从那里登录到我的远程机器来访问我的远程机器。两者都有不同的密码。有什么方法可以在 Eclipse 中使用这样的远程机器吗?

v
vhs

试试 Remote System Explorer (RSE)。它是一组插件,可以完全按照您的意愿行事。

RSE 可能已经包含在您当前的 Eclipse 安装中。要签入 Eclipse Indigo,请转到 Window > Open Perspective > Other... 并从 Open Perspective 对话框中选择 Remote System Explorer 以打开 RSE 透视图。

要在 Eclipse 中从 RSE 透视图创建 SSH 远程项目:

定义一个新连接并从 New Connection 对话框的 Select Remote System Type 屏幕中选择 SSH Only。输入连接信息,然后选择完成。连接到新主机。 (假设 SSH 密钥已经设置。)一旦连接,深入到主机的 Sftp 文件,选择一个文件夹并从项目的上下文菜单中选择创建远程项目。 (等待远程项目创建。)

如果正确完成,现在应该有一个新的远程项目可以从 Project Explorer 和 eclipse 中的其他透视图访问。正确设置 SSH 连接后,密码可以作为正常 SSH 身份验证过程的可选部分。现在通过 SSH 使用 Eclipse 创建了一个远程项目。


RSE 仍然很棘手。来自 RSE 的最佳想法是让 Eclipse 通过 SSH 连接完成所有操作,但该功能尚未发挥作用。工作功能涉及您需要在 Linux 机器上设置的一些服务器。
RSE 人员也喜欢获取错误/增强报告。
@Aaron - 我之前从 Makefile 尝试过那个 rsync 解决方案 - 它基本上会用一个 Ctrl+B 替换你的键序列。问题是使用这种方法我既不能从 Eclipse 运行也不能调试。 RSE 听起来确实是工作中的好工具。 @Ioan,你能详细说明什么不起作用吗? RSE wiki 似乎将 SSH 文件系统和远程调试列为当前功能......或者我将在这个星期一尝试一下。
@AaronDigulla 嗨,解决方案很酷,但是我发现当我构建远程项目时,Eclipse 正在尝试在本地编译它。无论如何让它在远程机器上编译和运行?
C/C++ 索引不能与 RSE 一起正常工作。索引器抱怨缺少符号。当项目和源文件存储在本地但使用 RSE 时,它运行良好。有任何想法吗?
L
Lagerbaer

最简单的方法是在 Linux Box 上运行 Eclipse CDT 并使用 X11-Forwarding 或远程桌面软件,例如 VNC。

当然,这只有在 Linux 机器上存在 Eclipse 并且与机器的网络连接足够快时才有可能。

优点是,由于一切都是本地的,您不会遇到同步问题,也不会遇到任何尴尬的跨平台问题。

如果您没有 Eclipse,您可以考虑通过 SMB(或 SSHFS)共享您的 linux 工作目录并从您的 Windows 机器访问它,但这需要相当多的设置。

两者都比拥有两个副本要好,尤其是在跨平台时。


恐怕linux盒子甚至没有X11。 :)
@Kos,您需要 X11 服务器在您实际所在的位置运行——无论是在虚拟机中使用 Linux,还是在 Windows 中使用 X11 服务器——以及在 Linux 服务器上运行的 Eclipse。 ssh 只允许通过隧道传输网络数据 - 您会发现压缩 +“-c blowfish”有助于体验。
只是为了澄清-您是指远程机器上所谓的“无头Eclipse”吗? (好吧,只要它甚至有 Java :))。我一直在寻找一个轻量级的客户端解决方案,但是在远程机器上进行一些设置也可能是一种选择。
@Kos:不。X11 是这样工作的:你有一个客户端和一个服务器。服务器是连接显示器的地方。它完成所有的渲染和显示。客户端(在本例中为 Eclipse)只是将渲染命令发送到服务器。所以你必须在 Windows 上安装 X11 并在你的 Linux 机器上运行 Eclipse。在 Linux 上您需要做的就是设置 DISPLAY 变量,以便 Eclipse 知道服务器在哪里。
不过,网络需要很快,您的服务器也是如此,或者 Eclipse 运行速度会非常慢。
t
timB33

我自己(或曾经)在同一个地方,FWIW 我最终签出了 Linux 主机上的 samba 共享并使用 notepad++ 在 Windows 机器上本地编辑该共享,然后我通过 PuTTY 在 Linux 机器上编译。 (Linux主机上的十个y/o版本的编辑器不允许更新,而且它没有Java,所以我放弃了X11转发)

现在......我在我的 Windows 主机上的虚拟机中运行现代 Linux,将我想要的所有工具(例如 CDT)添加到虚拟机,然后我签出并构建一个与 RTE 非常相似的 chroot 监狱。

这是一个笨拙的解决方案,但我想我会把它混在一起。


S
Samantha

除了使用 sshfs,我的解决方案与 SAMBA 类似。用 sshfs 挂载我的远程服务器,在远程机器上打开我的 makefile 项目。从那里去。

看来我也可以通过这种方式运行一个 GUI 前端。

构建我的远程代码很简单:ssh address remote_make_command

我正在寻找一种体面的调试方式。可能通过gdbserver?


a
arekolek

我尝试了 ssh -X,但速度慢得令人难以忍受。

我也尝试了 RSE,但它甚至不支持使用 Makefile 构建项目(I'm being told that this has changed since I posted my answer,但我还没有尝试过)

我读到 NX 比 X11 转发更快,但我无法让它工作。

最后,我发现我的服务器支持 X2Go(如果你的不支持,链接有安装说明)。现在我只需要:

在服务器上下载并解压 Eclipse,

在我的本地机器上安装 X2Go(Ubuntu 上的 sudo apt-get install x2goclient),

配置连接(主机,使用 ssh 密钥自动登录,选择运行 Eclipse)。

一切就像我在本地机器上工作一样,包括构建、调试和代码索引。并且没有明显的滞后。


只是添加它也适用于客户端的 Windows。客户端和服务器都安装简单容易,体验就像在本地工作一样。
9
900ss

2年前我遇到了同样的问题,我通过以下方式解决了它:

1)我使用 makefile 构建我的项目,而不是由 eclipse 管理 2)我使用 SAMBA 连接来编辑 Eclipse 中的文件 3)构建项目:Eclipse 使用 makefile 调用“本地”make,它打开到 Linux 的 SSH 连接主持人。在 SSH 命令行上,您可以提供在 Linux 主机上执行的参数。我为该参数使用了一个 makeit.sh shell 脚本,它在 linux 主机上调用“真正的”make。您还可以通过本地 makefile --> makeit.sh --> linux 主机上的 makefile 中的参数来提供不同的构建目标。


不错,但不能称为“透明”——至少不允许调试。也可以基于 RSync 而不是 Samba(这是我在发布原始问题之前所拥有的)。
G
GCUGreyArea

我解决这个问题的方法是:

对于窗户:

使用 samba 从 Linux 机器导出“工作区”目录。在 Windows 本地安装它。运行 Eclipse,使用挂载的“工作区”目录作为 Eclipse 工作区。导入您想要的项目并进行处理。

对于 Linux:

使用 sshfs 运行 Eclipse 挂载“工作区”目录。运行 Eclipse,使用挂载的“工作区”目录作为 Eclipse 工作区。导入您想要的项目并进行处理。

在这两种情况下,您都可以通过 Eclipse 构建和运行,或者通过 ssh 在远程机器上构建。


M
Mohamed Abdelazim

对于这种情况,您可以使用 ptp eclipse https://eclipse.org/ptp/ 进行源代码浏览和构建。

您可以使用此插件来调试您的应用程序

http://marketplace.eclipse.org/content/direct-remote-c-debugging


G
Gabriel Staples

如何在 Eclipse 中本地编辑,但使用我编写的基于 git 的脚本(sync_git_repo_from_pc1_to_pc2.sh)进行远程同步和构建

这个答案目前仅适用于使用两台 Linux 计算机 [或者也可以在 Mac 上工作?--在 Mac 上未经测试](从一台同步到另一台),因为我在 bash 中编写了这个同步脚本。不过,它只是 git 的一个包装器,因此您可以随意使用它并将其转换为跨平台 Python 解决方案或其他东西(如果您愿意)

这并不能直接回答 OP 的问题,但它是如此接近我保证它会回答许多其他人在此页面上的问题(实际上包括我的问题,因为我在编写自己的解决方案之前首先来到这里),所以我无论如何我都会在这里发布它。

我想要:

在轻量级 Linux 计算机上使用 Eclipse 等功能强大的 IDE 开发代码,然后在另一台更强大的 Linux 计算机上通过 ssh 构建该代码(从命令行,而不是从 Eclipse 内部)

让我们称我编写代码“PC1”(个人计算机 1)的第一台计算机和构建代码“PC2”的第二台计算机。我需要一个工具来轻松地从 PC1 同步到 PC2。我尝试了 rsync,但对于大型存储库来说速度非常慢,并且占用了大量带宽和数据。

那么,我该怎么做呢?我应该使用什么工作流程?如果您也有这个问题,这是我决定的工作流程。我编写了一个 bash 脚本来自动化该过程,方法是使用 git 通过远程存储库(例如 github)自动将更改从 PC1 推送到 PC2。到目前为止,它运行良好,我对此非常满意。 它比 rsync 快得多,在我看来更值得信赖,因为每台 PC 都维护一个功能性 git 存储库,并且使用更少的带宽来完成整个同步,所以它很容易通过手机热点实现,而无需使用您的大量数据。

设置:

在 PC1 上安装脚本(此解决方案假定 ~/bin 在您的 $PATH 中): git clone https://github.com/ElectricRCAaircraftGuy/eRCaGuy_dotfiles.git cd eRCaGuy_dotfiles/useful_scripts mkdir -p ~/bin ln -s "${ PWD}/sync_git_repo_from_pc1_to_pc2.sh" ~/bin/sync_git_repo_from_pc1_to_pc2 cd .. cp -i .sync_git_repo ~/.sync_git_repo 现在编辑您刚刚在上面复制的“~/.sync_git_repo”文件,并更新其参数以适合您的情况。以下是它包含的参数: # PC2 上的 git repo 根目录,您将文件同步到这里;这个目录必须*已经存在* # 并且你必须*已经有 `git clone`d* 一个你的 git repo 的副本! # - 不要使用诸如`$HOME`之类的变量。相反,要明确。这是因为当我们需要来自远程机器的变量扩展时,变量扩展将发生在本地机器上。 # 显式只是避免了这个问题。 PC2_GIT_REPO_TARGET_DIR="/home/gabriel/dev/eRCaGuy_dotfiles" # 明确输入;不要使用变量 PC2_SSH_USERNAME="my_username" # 明确输入;不要使用变量 PC2_SSH_HOST="my_hostname" # 明确输入;不要使用变量 Git 克隆您想要在 PC1 和 PC2 上同步的存储库。确保您的 ssh 密钥都设置为能够从 PC1 和 PC2 推送和拉取远程存储库。这里有一些有用的链接: https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh https://help.github.com/en/github/authenticating- to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent 确保您的 ssh 密钥都设置为从 PC1 到 PC2 的 ssh。现在 cd 进入 PC1 上 git repo 中的任何目录,然后运行:sync_git_repo_from_pc1_to_pc2 就是这样!大约 30 秒后,一切都会神奇地从 PC1 同步到 PC2,并且它会一直打印输出,告诉你它在做什么,它在你的磁盘和哪台计算机上执行它。它也很安全,因为它不会覆盖或删除任何未提交的内容。它首先备份它!阅读下面的更多信息,了解它是如何工作的。

这是这个脚本使用的过程(即:它实际上在做什么)

从 PC1:它检查 PC1 上是否有任何未提交的更改。如果是这样,它会将它们提交到当前分支上的临时提交。然后它强制将它们推送到远程 SYNC 分支。然后它取消提交它刚刚在本地分支上所做的临时提交,然后通过暂存您调用脚本时之前暂存的任何文件,将本地 git 存储库恢复到原来的状态。接下来,它将脚本的副本同步到 PC2,并执行 ssh 调用以告诉 PC2 运行脚本,并使用特殊选项来执行 PC2 的操作。这是 PC2 所做的:它 cd 到 repo 中,并检查是否存在任何本地未提交的更改。如果是这样,它会创建一个从当前分支分支出来的新备份分支(示例名称:my_branch_SYNC_BAK_20200220-0028hrs-15sec <--注意这是 YYYYMMDD-HHMMhrs--SSsec),并使用提交消息提交任何未提交的更改到该分支,例如就像备份 PC2(目标 PC/BUILD 机器)上所有未提交的更改一样。现在,它检查 SYNC 分支,如果它不在本地计算机上,则从远程存储库中提取它。然后,它获取远程存储库上的最新更改,并执行硬重置以强制本地 SYNC 存储库与远程 SYNC 存储库匹配。你可以称之为“硬拉”。但是,它是安全的,因为我们已经在 PC2 本地备份了所有未提交的更改,所以不会丢失任何内容!而已!您现在已经生成了从 PC1 到 PC2 的完美副本,甚至无需确保干净的工作目录,因为脚本为您处理了所有自动提交和内容!它速度很快,并且在大型存储库上运行良好。现在,您有了一个简单的机制,可以在一台机器上使用您选择的任何 IDE,同时在另一台机器上构建或测试,如果需要,可以轻松地通过手机的 wifi 热点,即使存储库有几十 GB 并且您是时候了并且资源有限。

资源:

整个项目:https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles 在这个项目的源代码中查看更多链接和参考。如何做一个“硬拉”,我称之为:Git:我如何强制“git pull”覆盖本地文件?

有关的:

移动时,计算机之间的 git 存储库同步?