Visual Studio 2019中用C++开发Linux:WSL、Linux ASAN、构建与调试的分离

在visualstudio2019中,您可以通过一个IDE轻松地针对Windows和Linux。在 Visual Studio 2019版本16.1预览版3 我们宣布了一些特定于 Linux工作负载 :本机支持 Windows Linux子系统(WSL) , 地址消毒剂集成 ,以及分离构建和调试目标的能力。如果您刚刚开始跨平台开发,我建议您尝试我们的 对WSL的本机支持 .

null

对Windows Linux子系统(WSL)的本机支持

VisualStudio现在提供了使用C++的本地支持 WSL公司 . WSL允许您直接在Windows上运行轻量级Linux环境,包括大多数命令行工具、实用程序和应用程序。在visualstudio中,为了在本地WSL安装上构建和调试,您不再需要添加远程连接或配置SSH。查看我们的 在visualstudio中发布对WSL的本机支持 要了解更多信息,请遵循入门指南。

图片[1]-Visual Studio 2019中用C++开发Linux:WSL、Linux ASAN、构建与调试的分离-yiteyi-C++库

Linux工作负载的AddressSanitizer

在VisualStudio2019版本16.1预览版3中,我们集成了 地址消毒剂 (ASan)进入visualstudio for Linux项目。ASAN是一个C/C++的运行时内存错误检测器。您可以为启用ASan 基于MSBuild的Linux项目 CMake项目 目标是远程Linux机器或WSL。查看我们的 visualstudio中Linux工作负载的post-on-AddressSanitizer 更多信息。

图片[2]-Visual Studio 2019中用C++开发Linux:WSL、Linux ASAN、构建与调试的分离-yiteyi-C++库

Linux项目的独立构建和调试目标

更新1/27/2020:在VisualStudio2019版本16.5及更高版本中,您可以利用VisualStudio的 将构建系统与远程部署系统分离时对WSL的本机支持 .

现在,您可以将远程生成计算机与远程调试计算机分离,以实现这两个目的 基于MSBuild的Linux项目 CMake项目 目标是远程Linux机器。例如,您现在可以在x64上交叉编译,并在针对物联网场景时部署到ARM设备。

对于基于MSBuild的Linux项目,可以在项目的属性页(配置属性>调试>远程调试计算机)中指定新的远程调试计算机。默认情况下,此值与远程生成计算机同步(配置属性>常规>远程生成计算机)。 图片[3]-Visual Studio 2019中用C++开发Linux:WSL、Linux ASAN、构建与调试的分离-yiteyi-C++库

下拉菜单中填充了所有已建立的远程连接。至 添加新的远程连接 ,导航到“工具”>“选项”>“跨平台”>“连接管理器”,或在屏幕顶部的搜索栏中搜索“连接管理器”。您还可以在项目的属性页(配置属性>常规>远程部署目录)中指定新的远程部署目录。

默认情况下,只有进程调试所需的文件才会部署到远程调试计算机。您可以查看/配置将通过解决方案资源管理器部署的源文件。单击源文件时,将在解决方案资源管理器的正下方看到其文件属性的预览。也可以右键单击源文件并选择“属性”

图片[4]-Visual Studio 2019中用C++开发Linux:WSL、Linux ASAN、构建与调试的分离-yiteyi-C++库

“Content”属性指定是否将文件部署到远程调试计算机。您还可以通过导航到Property Pages>Configuration Manager并取消选中所需配置的“Deploy”来完全禁用部署。

如果要完全控制项目的部署(例如,要部署的某些文件不在解决方案中,或者要自定义每个文件/目录的远程部署目录),则可以将以下代码块附加到.vcxproj文件中:

<ItemGroup>
   <RemoteDeploy Include="__example.cpp">
<!-- This is the source Linux machine, can be empty if DeploymentType is LocalRemote -->
      <SourceMachine>$(RemoteTarget)</SourceMachine>
      <TargetMachine>$(RemoteDebuggingTarget)</TargetMachine>
      <SourcePath>~/example.cpp</SourcePath>
      <TargetPath>~/example.cpp</TargetPath>
<!-- DeploymentType can be LocalRemote, in which case SourceMachine will be empty and SourcePath is a local file on Windows -->
      <DeploymentType>RemoteRemote</DeploymentType>
<!-- Indicates whether the deployment contains executables -->
      <Executable>true</Executable>
   </RemoteDeploy>
</ItemGroup>

对于以远程Linux机器为目标的CMake项目,可以通过 启动.vs.json . 默认情况下,“remoteMachineName”的值将与中的“remoteMachineName”属性同步 CMakeSettings.json文件 ,它对应于远程生成计算机。这些属性不再需要匹配,launch.vs.json中的“remoteMachineName”值将指示用于部署和调试的远程计算机。

图片[5]-Visual Studio 2019中用C++开发Linux:WSL、Linux ASAN、构建与调试的分离-yiteyi-C++库

IntelliSense将建议所有已建立的远程连接的列表,但您可以 添加新的远程连接 导航到“工具”>“选项”>“跨平台”>“连接管理器”,或在屏幕顶部的搜索栏中搜索“连接管理器”。

如果希望完全控制部署,可以将以下代码块附加到launch.vs.json:

"disableDeploy": false,
"deployDirectory": "~foo",
"deploy" : [
   {
      "sourceMachine": "127.0.0.1 (username=example1, port=22, authentication=Password)",
      "targetMachine": "192.0.0.1 (username=example2, port=22, authentication=Password)",
      "sourcePath": "~/example.cpp",
      "targetPath": "~/example.cpp",
      "executable": "false"
   }
]

已解决的问题

向C++团队报告问题或建议特性的最好方法是通过 开发者社区 . 在VisualStudio 2019 16.1预览2或预览3中,最近解决了与C++跨平台开发有关的以下反馈票:

使用CppProperties.json时没有配置

无法附加linux虚拟机的进程

cmake linux二进制部署因WSL而失败

打开现有的CMake缓存失败时,会出现信息栏

如果SSH在构建远程Linux CMake项目时出现连接错误,VS2017将崩溃

测试超时功能在测试资源管理器中不起作用

CMake:对CMakeLists.txt的任何微小更改都会触发完全缓存再生

CMake+Intellisense:CMakeLists中的预处理器定义不适用于带引号的字符串

Linux Makefile项目的智能感知问题

跟我们谈谈!

您对我们在visualstudio中的Linux工具有反馈吗?选择一个时间 与C++跨平台团队聊天 并分享您的经验-好的和坏的-以帮助我们优先考虑和建立正确的功能为您!我们也可以通过下面的评论,电子邮件( visualcpp@microsoft.com ),和Twitter( @ 视觉 )以及( @埃里卡斯韦特_ ).

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0 分享