VisualStudio2019中Linux工作负载的AddressSanitizer(ASan)

Visual Studio 2019版本16.1预览版3 我们已经整合了 消毒液(ASan) 进入visualstudioforlinux项目。ASAN是一个C/C++的运行时内存错误检测器,它捕获以下错误:

null
  • 释放后使用(悬挂指针引用)
  • 堆缓冲区溢出
  • 栈缓冲区溢出
  • 退货后使用
  • 作用域后使用
  • 初始化顺序错误

您可以为启用ASan 基于MSBuild的Linux项目 CMake项目 目标是 远程Linux系统 WSL(适用于Linux的Windows子系统) . 如果您刚刚开始跨平台开发,我建议您按照以下步骤 开始使用VisualStudio对WSL的本机支持 .

ASan检测程序执行过程中遇到的错误,并在第一次检测到错误时停止执行。在调试器下运行已启用ASan的程序时,将在发生错误的行中看到以下错误消息(详细说明错误类型和位置):

AddressSanitizer error

您还可以在“输出”窗口的“调试”窗格中查看完整的ASan输出(包括已损坏内存的分配/释放位置)。

Visual Studio中的ASan入门

为了在visualstudio中使用ASan,您需要在远程Linux机器或WSL安装上安装ASan的调试符号(libasandbg)。您加载的libasan dbg版本取决于您在Linux计算机上安装的GCC版本:

ASan版本 GCC版本
利巴桑0 合同一般条件-4.8
利巴斯2 合同通用条款-5
利巴桑3 合同通用条款-6
利巴桑4 合同通用条款-7
利巴桑5 合同通用条款-8

可以使用以下命令确定Linux计算机或WSL安装上的GCC版本:

gcc–版本

您还可以通过查看output窗口的Debug窗格来查看所需的libasan dbg版本。加载的ASan版本与Linux机器上需要的libasan dbg版本相对应。可以在“输出”窗口的“调试”窗格中搜索以下行(ctrl+F):

已加载“/usr/lib/x86_64-linux-gnu/libasan.so.4”。符号已加载。

在这个例子中,我的Linux机器(ubuntu18.04)使用libasan4。

您可以通过以下命令在使用apt的Linux发行版上安装ASan调试位(此命令安装版本4):

sudo apt get安装libasan4 dbg

如果您在visualstudio中启用了ASan,那么我们将提示您在output窗口的debug窗格顶部安装ASan的调试符号。

为基于MSBuild的Linux项目启用ASan

您可以为启用ASan 基于MSBuild的Linux项目 在项目的属性页中。右击解决方案资源管理器中的项目,选择“属性”打开项目的属性页,然后导航到配置属性> C/C++ >消毒器。ASan是通过编译器和链接器标志启用的,需要重新编译才能工作。

Enable ASan for MSBuild-based projects via the project's Property Pages

注意:从VisualStudio 2019版本16.4开始,通过配置属性> C/C++ >启用地址清理器,启用Linux项目的AddiSsSuniZiver。

你也可以通过选修课 ASan运行时标志 导航到Configuration Properties>Debugging>AddressSanitizer Runtime Flags。

为Visual Studio CMake项目启用ASan

您可以在中为针对远程Linux计算机或WSL的CMake配置启用ASan CMake设置编辑器 . 在编辑器的“常规”部分,您将看到以下两个属性来启用ASan和传递可选运行时标志: Enable ASan for CMake projects via the CMake Settings Editor

同样,ASan是通过编译器和链接器标志启用的,需要重新编译才能工作。

给我们你的反馈!

如果您对ASan的Linux工作负载或任何与visualstudio中的Linux支持相关的信息有反馈,我们很乐意收到您的回复。我们可以通过下面的评论或电子邮件联系我们( visualcpp@microsoft.com ). 如果您在visualstudio或MSVC中遇到其他问题,或者 建议,你可以用 报告问题 工具或直接访问 Visual Studio开发人员社区 . 你也可以在Twitter上找到我们( @视觉 )以及( @埃里卡斯韦特_ ).

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