此帖于2020年12月11日更新
Visual Studio 2017推出 用C++工作负载开发Linux . 我们通常建议 VisualStudio对CMake的本机支持 适合所有C++的Linux开发。VisualStudio的CMake支持允许您使用单个CMake项目针对多个平台(Windows、远程Linux系统、Linux的Windows子系统、嵌入式目标…)。您可以在我们的网站上了解有关CMake项目的更多信息 文档 在我们的 C++团队博客 .
这篇文章介绍了如何使用Visual Studio基于MSBuild的支持在带有Visual Studio 2019的远程Linux系统上构建和调试。如果您希望使用同一项目同时针对Windows和Linux,我们建议您使用CMake。
在这篇文章中,你将学到:
- 如何获得 用C++工作负载开发Linux ,
- 如何创建 基于MSBuild Linux C++项目
- 如何从Visual Studio建立与Linux计算机的第一个连接,
- 如何在Visual Studio和Linux之间管理源代码,
- Linux项目系统提供了哪些功能,以及
- 如何使用VisualStudio诊断工具查找和解决问题。
如果您对使用VisualStudio进行C++开发是一个新的,那么我们的指南就是一个很好的起点。 Visual Studio入门 .
用C++安装Linux开发的工作负载
VisualStudio 2017和2019包括C/C++ Linux开发工作负载。要安装它,请启动visualstudio安装程序并选择安装或修改现有安装。滚动到底部。在“其他工具集”的章节中,你会发现用C++开发Linux。工作负载在10分钟内安装完毕。了解更多关于安装C++开发的Linux开发 文档 .
正在打开项目
您将需要一台Linux机器,或者您可以使用 Linux的Windows子系统 . 您可以使用任何安装了SSH、gdb、rsync、zip和编译器(clang或GCC)的Linux发行版。在基于Debian的Linux环境中,这非常简单:
sudo apt update sudo apt install -y build-essential gdb rsync zip openssh-server
使用以下命令启动SSH:
sudo service start ssh
了解有关在我们的应用程序中创建Linux环境的选项的更多信息 文档 .
在VisualStudio中创建一个新的MSBug为基础的Linux控制台应用程序,将语言过滤到C++、平台到Linux,并选择“控制台应用程序”。
此项目将打开一个自述文件,其中包含有关其功能的一些说明。我们将首先选择项目的平台工具集。右键单击 解决方案管理器 并选择 属性 .
有四个平台工具集可供选择:GCC for Remote Linux、Clang for Remote Linux、GCC for Windows Subsystem for Linux和Clang for Windows Subsystem for Linux。选择与编译器和Linux环境匹配的工具集,然后按OK。“远程Linux”工具集需要连接管理器中的SSH连接。“Windows Subsystem for Linux”工具集使用visualstudio的 对WSL的本机支持 不需要SSH。在本教程中,我将使用GCC for remotelinux工具集。退房 本教程 有关我们对WSL的本机支持的更多信息。
现在我们可以向连接管理器添加一个新的远程连接。选择 工具>选项>跨平台>连接管理器 打开连接管理器。您可以使用密码或私钥身份验证添加新连接。了解更多有关连接到远程Linux系统的信息 文档 .
输入信息后,visualstudio将管理到执行生成的Linux系统的连接。 如果有任何问题,构建输出会直接指向代码中发现的问题。
项目系统在Windows和Linux之间同步您的源代码,并为您提供广泛的控制,以便在需要时自己管理。在中的项目上单击鼠标右键 解决方案管理器 然后选择 属性 .
- 这个 总则 属性页允许您设置选项,例如在远程系统上使用哪些文件夹以及输出的配置类型(可执行、静态或动态库)。
- 这个 调试 页面提供对执行的附加控制;例如,您可以在启动程序之前运行其他命令,例如导出显示器以调试桌面应用程序。
- 这个 VC++目录 页面提供了通过提供要包括或排除的其他目录来控制IntelliSense的选项。
- 这个 复制源 属性页允许您指定是否将源复制到远程Linux系统。如果使用共享或通过其他方式管理自己的同步,则可能不希望复制源。
- 这个 C/C++ 和 链接器 属性页组提供了许多选项来控制传递给编译器的标志。它们还允许您重写默认设置以使用g++或clang++并指定自己的设置。
- 最后是 生成事件 属性页组提供了在生成过程中本地或远程运行其他命令的功能。
了解有关在我们的中配置基于MSBuild的Linux项目的更多信息 文档 .
使用Linux的C++代码使用VisualStudio生产力特性的全部功能
IntelliSense是为GCC、Clang和libstdc++提供的现成工具。Visual Studio自动 复制项目引用的标题 从Linux系统到Windows提供智能感知。一旦开始使用自己的代码,就可以真正看到visualstudio的生产力特性。
会员名单 和 快捷信息 下面的屏幕截图中显示了两个强大的IntelliSense功能示例,这些功能使编写代码更容易、更快。 会员名单 显示类型或命名空间中有效成员的列表。在C++代码中的对象实例中键入“->”将显示成员列表,并且可以通过按Tab或键入空间或周期来将选定成员插入到代码中。 快捷信息 显示代码中任何标识符的完整声明。在下面的屏幕截图中,VisualStudio显示了SimpleServer对象的可访问成员列表和 打开 方法。
重构、自动完成、扭曲、引用突出显示、语法着色和代码段是其他一些有用的生产力特性,在编写和编辑代码时非常有用。
在大型代码库中导航和在多个代码文件之间跳转可能是一项累人的任务。VisualStudio提供了许多优秀的代码导航功能,包括 转到定义 , 转到线条/符号/成员/类型 , 查找所有引用 , 查看 调用层次结构 , 对象浏览器 ,还有更多。
这个 Peek定义 特性,如下面的屏幕截图所示,在不切换当前正在编辑的代码的情况下内联显示定义。你可以找到 Peek定义 通过将插入点放置在要探索的方法上,然后单击鼠标右键或按Alt+F12。在下面的截图中,OpenCV人脸检测的定义 检测多尺度 方法,in 对象检测.hpp ,显示在当前.cpp文件的嵌入式窗口中。
我们的Linux支持还集成了本地Linux工具,比如AddressSanitizer。了解有关在我们的应用程序中启用ASAN的更多信息 文档 .
调试和诊断问题
VisualStudio擅长于帮助您解决开发问题,现在您可以在Linux上使用C++代码来使用这些功能。您可以在C++代码中设置断点,并按F5启动调试器并在Linux机上运行代码。当遇到断点时,您可以在 汽车 和 观察 工具窗口以及在数据提示中鼠标悬停,查看 调用堆栈 窗口,轻松地进出代码。您还可以在断点中使用条件来缩小特定问题的范围。同样,您可以设置操作,将变量值记录到输出窗口。您还可以检查应用程序线程或查看反汇编。
如果您需要在Linux上与程序交互,您可以 在visualstudio中使用Linux控制台窗口 . 要激活此窗口,请使用菜单 调试 > Linux控制台 . 在下面的屏幕截图中,您可以看到第24行提供给scanf调用的输入。
您甚至可以连接到Linux机器上的进程来实时调试问题。打开 调试 菜单并选择 附加到进程 . 如下面的屏幕截图所示,选择SSH连接类型。然后可以使用下拉目标菜单来选择一台Linux机器。然后将枚举您以前创建的远程连接。
用C++页面查看调试和诊断 了解我们的一般能力。
从VisualStudio Linux C/C++开发开始
进一步了解 跨平台CMake项目 和 基于MSBuild的Linux项目 在我们的文件中。请选择IDE右上角的“发送反馈”图标,从VisualStudio中提供反馈。