从Linux远程开发Visual C ++应用程序

时间:2017-09-29 09:04:02

标签: linux windows powershell visual-c++ ssh

远程开发 Linux 来自 Windows可通过SSH轻松实现。

然而,另一种方式呢?我需要在Windows上构建和调试我的Visual C ++应用程序,但我想在Linux系统上工作。

  1. 由于MSVC特定的库
  2. ,通过MinGW进行交叉编译不起作用
  3. Windows上的Ubuntu是一个好的开始,但我想在真正的Linux系统上工作
  4. RDP / VNC之类的东西也无济于事,因为我再次在Windows上工作
  5. 虚拟机也是如此
  6. 也许类似于Linux上的Powershell + SSH到Windows Powershell?

2 个答案:

答案 0 :(得分:4)

我经常从Linux远程开发Visual C#应用程序,而不是MSVC,但是,和你一样,我想找到一种方法来构建和调试远程Windows机器上的Windows目标应用程序和库,而无需直接在框使用RDP,Visual Studio等。

如果没有关于您希望在Linux上使用的开发和调试工具的更多信息来解决您开发的应用程序类型,则很难回答这个问题。我将尝试提供一般概述并更新您添加的有关工作流程的详细信息的答案。

Cygwin类似,

MinGW's MSYS为Windows提供了类Unix环境。最重要的是,与MinGW / MSYS不同,Cygwin包含OpenSSH服务器的实现,使我们能够通过SSH从Linux(或任何其他具有SSH客户端的设备)连接到Windows机箱。我们可以使用Cygwin的安装实用程序安装 sshd 包。连接后,Cygwin默认将我们放入Bash shell。有了这个功能,我们可以:

  • 通过SSH执行远程命令和脚本。
  • 使用我们最喜欢的* nix命令行文本编辑器(Vim,Emacs等)编辑文件
  • 使用SSHFS在本地挂载远程文件系统(如果Windows共享不可用)。
  • 如果需要,转发或隧道端口。

通用shell的可用性使几乎任何可能的事情。除了Linux脚本和Cygwin程序之外,我们还可以从Cygwin的shell环境中执行批处理文件,PowerShell脚本和本机Windows可执行文件。

例如,我们可以从SSH会话命令行run msbuild来构建我们的VC ++应用程序,或者我们可以配置在Linux中运行的本地GUI编辑器或IDE,以便在SSH上执行 msbuild 我们点击" build"按钮。

我们可以使用Windows Subsystem for Linux(" WSL",Windows上的Bash)在最新版本的Windows中设置类似的环境。我个人更喜欢Cygwin,因为它具有更好的可移植性和易于配置性。 Cygwin的 sshd 可以作为Windows服务运行,作为一个已建立的项目,Cygwin将非常好与Windows系统(用户帐户,文件系统,Windows API,等等。)。

使用代码

我们可以根据我们的工具和命令行的舒适度选择多个工作流程:

  1. 完全基于文本的所有工作通过SSH会话执行
  2. 对安装在远程文件系统中的文件使用本地工具
  3. 使用本地工具并同步文件
  4. 我使用第一种方法。我是一个沉重的Vim用户,所以我通过SSH连接到Windows机器,使用Cygwin提供的工具和环境在命令行上完成我的工作。通常在Linux上找到的工具的可用性简化了许多从默认Windows控制台很难完成的任务。我们可以编写shell脚本来自动执行Visual Studio通常可以为我们执行的任务。例如,我在 mstest 周围编写了一个包装脚本,它读取XML测试结果并以易于在终端中读取的格式输出。

    如果我们更喜欢使用GUI编辑器或IDE,我们可以在本地安装远程代码,这样工具就可以读取和写入文件,就像它们是Linux机器本地文件系统的一部分一样。我们可能仍然需要使用SSH来执行构建项目所需的命令,但是许多编辑器允许我们将此命令配置为项目" build"动作。

    有时远程文件系统太慢而无法进行有效编辑。在这些情况下,我们可以使用 rsync 之类的工具或编辑器"上传保存"来在Linux开发机器和Windows主机之间同步文件。功能(例如,通过SFTP),如果可用。

    调试

    在我们尝试找到调试应用程序的方法之前,一切都运行良好。截至目前,在使用Visual C ++项目时,Visual Studio的调试器没有合理的替代。我们可以使用MDbg调试在CLR上运行的托管C#应用程序,但是没有类似的工具可用于C ++程序。

    我们可以尝试使用 gdb (来自MinGW,Cygwin等)进行本机二进制文件的基本低级调试,比如读取内存地址,但调试器还不支持阅读Microsoft& #39; s调试符号,因此调试体验非常有限。微软began documenting几年前的PDB格式,所以我们可能会在未来看到一些兼容性。即使这样,也需要很长时间才能为Visual Studio提供出色的调试工具。

    对于调试,RDP目前是我们最好的,也许是唯一的选择。为了获得更原生的体验,我们可以使用rdesktop(或其他RDP客户端)和seamlessrdp运行Visual Studio来创建Visual Studio IDE的单窗口RDP会话,而不是完整的桌面。与我们在Linux上使用的任何窗口管理器集成。

    有时我们可以通过向我们的应用程序添加跟踪来为控制台或日志文件输出值,从而为简单的调试方案启动完整的Visual Studio调试会话。在许多情况下,这比启动调试器要快。

    我们也可以尝试使用为Visual C ++工具链配置的Eclipse's CDT debugger。这可以使我们能够使用Linux机器上的Eclipse实例执行远程调试。我从未尝试过这种方法,并且我预计当应用程序与Microsoft的库链接时可能会出现一些问题。

答案 1 :(得分:1)

我不知道你的所有要求,但也许你可以在Windows上使用gdbserver(来自MinGW)和在Linux上使用VSCode进行远程调试 - 或者你喜欢的任何其他环境。您可以在此帖here中找到更多详细信息。 (注意,VSCode阻止你运行gdb,除非它在第一个链接中提到了签名。)
还有一个Native Debug VSCode扩展可能会有所帮助。

我能想到的另一个解决方案是使用Visual Studio Online(最多5人的小团队免费)作为构建服务器。

正如你所说,反过来非常容易,现在甚至是Visual Studio 2017的officially supported

最有可能的是,Windows的VS remote debugging tools对您没有帮助。