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

通过SSH可以轻松地在 Windows上从 Linux进行远程开发.

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

>由于MSVC特定的库,通过MinGW交叉编译不起作用
> Windows上的Ubuntu是一个良好的开端,但我想在一个真正的Linux系统上工作
> RDP / VNC或类似的东西也没有帮助,因为我再次在Windows上工作
>虚拟机也是如此

也许类似于Linux上的Powershell SSH到Windows Powershell?

解决方法

我经常从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共享不可用).
>如果需要,可以转发或隧道端口.

通用外壳的可用性几乎可以实现.除了Linux脚本和Cygwin程序之外,我们还可以从Cygwin的shell环境中执行批处理文件,PowerShell脚本和本机Windows可执行文件.

例如,我们可以从SSH会话命令行run msbuild来构建我们的VC应用程序,或者我们可以配置我们在Linux中运行的本地GUI编辑器或IDE,当我们单击“构建”按钮时通过SSH执行msbuild.

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

使用代码

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

>完全基于文本 – 通过SSH会话执行的所有工作
>在远程文件系统中安装的文件上使用本地工具
>使用本地工具并同步文件

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

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

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

调试

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

我们可以尝试使用gdb(来自MinGW,Cygwin等)进行原生二进制文件的基本低级调试,比如读取内存地址,但调试器还不支持读取Microsoft的调试符号,因此调试体验非常有限.微软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的库链接时可能会出现一些问题.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...