打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
2020年6月:Visual Studio对Linux开发平台的更新

三项更新

通过使用Visual Studio 2019,你可以在一台远程Linux系统或者WSL(Windows Subsystem for Linux)上进行编译和调试C++工程,另外,你还可以使用Visual Studio中开发基于MSBuild和基于CMake的工程。

CMake是一个很好的工具,对于同一套代码,可以使用CMake来对各种不同平台编写构建脚本。所以,我们推荐它作为跨平台开发的首选编译工具,同时在开源世界也有很多开发者一直在使用它。

在今天的文章中,我们将关注近期Visual Studio对Linux开发平台的各种更新要点,它们分别是:

> 对于Linux版Ninja的支持。Ninja是一个关注于速度的编译系统。一直以来,Ninja都是作为Windows目标平台CMake配置的默认生成引擎(底层的构建系统),从Visual Studio 2019 v16.6 Preview 3开始,我们添加了Linux版Ninja的支持。具体来说,由于在速度上Ninja比传统Unix Makefiles更胜一筹,所以我们将它作为了Linux目标平台(或者WSL)的首选CMake配置生成器。

> 对gdbserver的顶格支持。Gdbserver是一个可以针对运行在远程Linux系统上的程序进行调试的服务器程序。它特别适合于嵌入式调试的场景,因为目标系统可能不具备足够的资源来运行gdb。在Visual Studio 2019 v16.7 Preview 1中,我们添加了一个新的调试器配置,以支持远程系统的CMake工程的调试。这样的话,你再也不需要手动的修改launch.vs.json配置文件了,手动修改配置文件一直是比较麻烦的事情。

> 针对连接管理器的优化。Visual Studio中的连接管理器可以用来管理和存储SSH远程连接信息。针对我们收到的大量反馈,我们决定在Visual Studio 2019 v16.7 Preview 2中添加远程连接的修改和设置默认连接的功能支持。有了这个功能,你就可以方便的修改一个现有的远程连接(例如,远程设备的IP发生了变化,你可以直接修改),以及设置默认的远程连接,这个默认的远程连接将会在CMake工程中的CMakeSettings.json和launch.vs.json文件中的这个变量<${defaultRemoteMachineName}>使用到。

使用Ninja提高Linux工程编译速度

Ninja现已成为CMake配置的默认生成引擎。在基于Debian的Linux系统上,你可以使用如下指令安装Ninja:

我们选用了两个开源工程bullet3和LLVM来测试Ninja和Unix Makefiles的编译性能。下表中展示了在Visual Studio中和在一台本地VM(Ubuntu)上进行一次重新编译的时间对比。

在Visual Studio 2019 v16.6 Preview 3及更高版本中,你可以直接在Visual Studio上直接编译Linux工程,借助CMake和Ninja,你将会看到编译性能的显著提高,带来的更少的编译时间(更多的喝咖啡时间)。

对gdbserver的顶格支持

在Visual Studio 2019 v16.6 Preview 2中,我们新引入了一种新的调试模板来简化gdb远程调试。在v16.7 Preview 1中,我们对这个模板进行了一些扩展,实现了对gdbserver调试的顶格支持。

针对CMake工程的调试会话信息是配置在launch.vs.json文件中的。关于如何添加新配置的方法还是需要参考帮助文档,下图是一个简单的例子,在这个例子中,我们使用了”cppgdb”这一配置类型来实现远程Linux或WSL的调试。

Visual Studio使用了基于gdb或者gdbserver的调试前端来对远程系统或者WSL进行调试。在上面的配置文件中,你可以设置为gdb或者gdbserver来选择不同的调试引擎。

debuggerConfiguration: 指定默认使用的调试引擎。在Visual Studio 2019 v16.6中,只有gdb可用。在Visual Studio 2019 v16.7及更高版本中,我们添加了对gdbserver的支持。

另外,在这个配置文件中,还有gdbserver有关的其他配置项,它们是

gdbPath: 默认值是<${debugInfo.vsInstalledGdb}>。它是gdb的完整Windows路径。在默认情况下,它指向Linux C/C++ 开发工具集的gdb安装位置。

gdbserverPath: 默认指向usr/bin/gdbserver。它是gdbserver的Unix完整路径。

我们对gdbserver的顶格支持将会在远程系统上启动gdbserver进程,将gdbserver的标准输出放入管道,然后将标准错误输出重定向到Visual Studio的输出窗口,在任何错误发生或者调试结束的时候,我们将会结束gdbserver进程。关于完整的配置选项的说明请查看更新文档。

我们推荐使用gdb作为常规远程调试的首选工具。Gdbserver一般是用在目标系统资源不足以运行gdb的时候(例如,嵌入式开发场景)。在这种场景下,借助于编译和部署分离的机制,我们可以构建一个更为强大的Linux系统(或者本机WSL),并使用gdbserver对低配置设备进行调试。

连接管理器更新

最后,我们在Visual Studio 2019 v16.7 Preview 2中对连接管理器进行了更新。具体来说,我们现在可以编辑和设置默认远程连接。在Visual Studio中,连接管理器主要用来管理和存储到远程系统的SSH安全连接。如下图所示:

当目标设备的IP地址发生变化的是,你可以在连接管理器中直接修改现有连接,而不需要删除原有连接然后新增连接。这样做的好处是,Visual Studio将不再需要重复拷贝远程系统上的包含目录,从而提供了一个自动化拷贝的本机IntelliSense体验。

另外,你也可以设置默认连接,它将被CMakeSettings.json和launch.vs.json文件中的<${defaultRemoteMachineName}>所引用到。这可以在不包含任何机器相关配置信息的情况下将这些文件签入到源码控制系统。

总结

目前Visual Studio已经进化到了v16.7 Preview 2,随着对Linux开发者越来越完善的支持,相信不久的将来,Visual Studio会成为Linux开发者工具箱中的一件必备利器。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
大道至简: 调试远程系统和WSL的新模板来了
使用vs2019进行Linux远程开发的方法步骤
Visual C++ for Linux Development的简单配置
VisualGDB for Linux 安装配置
open62541编译
arm-linux-gdb gdbserver双串口目标机调试心得
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服