远程开发on Linux 从 Windows可以轻松地通过SSH完成。
然而,另一种方式又如何呢?我需要在Windows上构建和调试我的VisualC++应用程序,但是我想在一个Linux系统上工作。
比如Linux上的Powershell +中的SSH?
发布于 2017-10-09 17:03:36
我经常从Linux远程开发VisualC#应用程序,而不是MSVC,但像您一样,我想找到一种方法在远程Windows计算机上构建和调试针对Windows的应用程序和库,而不直接使用RDP、Visual等在框中工作。
如果没有更多关于您喜欢在Linux上为开发的应用程序类型使用的开发和调试工具的信息,就很难回答这个问题。我将尝试提供一个总体概述,并更新您添加的有关工作流程的详细信息的答案。
西格温类似于MinGW的MSYS,为Windows提供了类似Unix的环境。最重要的是,Cygwin与MinGW/MSYS不同,它包括一个OpenSSH服务器的实现,它使我们能够通过Linux (或任何其他带有SSH客户端的设备)连接到Windows。我们可以使用Cygwin的安装工具安装sshd包。连接之后,Cygwin默认将我们放到一个Bash shell中。有了这一能力,我们可以:
通用外壳的可用性几乎使任何事情都成为可能。除了Linux脚本和Cygwin程序之外,我们还可以从Cygwin的shell环境中执行批处理文件、PowerShell脚本和本机Windows可执行文件。
例如,我们可以从SSH会话命令行跑来构建VC++应用程序,也可以配置本地GUI编辑器或在Linux中运行的IDE,以便在单击" build“按钮时在SSH上执行msbuild。
我们可以使用https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux ("WSL",Bash )在最新版本的Windows中设置类似的环境。我个人更喜欢Cygwin,因为它具有更好的可移植性和更方便的配置。Cygwin的sshd可以作为Windows服务运行,而且作为一个已建立的项目,Cygwin与Windows系统(用户帐户、文件系统、Windows API等)集成得很好。
与代码一起工作
我们可以通过命令行从几个工作流中进行选择,这取决于我们的工具和舒适级别:
我用第一种方法。我是一个沉重的Vim用户,所以我通过SSH连接到Windows机器,使用Cygwin提供的工具和环境在命令行上完成我的工作。Linux上常见的工具的可用性简化了许多在默认Windows控制台中很难执行的任务。我们可以编写shell脚本来自动化Visual通常为我们完成的任务。例如,我在mstest周围编写了一个包装器脚本,它读取XML测试结果并以一种易于在终端中读取的格式输出它们。
如果我们更喜欢使用GUI编辑器或IDE,我们可以在本地挂载远程代码,这样工具就可以读取和写入文件,就好像它们是Linux机器本地文件系统的一部分一样。我们可能仍然需要使用SSH来执行构建项目所需的命令,但是许多编辑器允许我们将此命令配置为项目的“构建”操作。
有时,远程文件系统太慢,无法进行有效的编辑。在这些情况下,我们可以使用诸如rsync或编辑器的“上传上存”功能(例如,通过SFTP )来同步Linux开发机器和Windows主机之间的文件。
调试
在我们试图找到调试应用程序的方法之前,一切都很顺利。到目前为止,在使用Visual C++项目时,还没有合理的替代Visual调试器的方法。我们可以使用C#调试在CLR上运行的托管MDbg应用程序,但是C++程序没有类似的工具。
我们可以尝试使用gdb (来自MinGW、Cygwin等)对于本机二进制文件的基本低级别调试,如读取内存地址,但调试器还不支持读取Microsoft的调试符号,因此调试经验非常有限。微软开始记录的PDB格式几年前,所以我们可能会看到一些兼容性在未来。即使如此,要使Visual的优秀调试工具有一个令人满意的替代方案,还需要很长时间。
对于调试,RDP目前是我们最好的--也可能是唯一的--选项。为了获得更自然的体验,我们可以使用R桌面 (或其他RDP客户端)和无缝运行Visual,以创建Visual的单一窗口RDP会话,而不是与我们在Linux上使用的任何窗口管理器集成的完整桌面。
有时,我们可以通过将跟踪添加到将值输出到控制台或日志文件的应用程序,从而为简单调试方案启动完整的Visual调试会话。在许多情况下,这比启动调试器更快。
我们还可以尝试使用为VisualEclipse的CDT调试器工具链配置的Eclipse的CDT调试器。这可能使我们能够在Linux机器上使用Eclipse实例执行远程调试。我从未尝试过这种方法,我预计当应用程序与Microsoft库链接时可能会出现一些问题。
发布于 2017-10-05 03:21:20
https://stackoverflow.com/questions/46485426
复制相似问题