特别感谢亚伦·戈伦斯坦,他为这篇博文提供了大部分内容。特别感谢Kevin Cadieux和Jim Radigan,他们也做出了贡献。
您可以在YouTube上最新的Visual Studio工具箱插曲中查看此功能的演示: Visual Studio Toolbox Live—Visual Studio 2019版本16.9有何新功能?–YouTube网站
要开始使用此体验,请查看 我们的文件 .
—
我们很高兴地宣布,VisualStudio 2019版本16.9中,完全支持MSVC体验的C++地址消除器(ASAN)。感谢所有在早期版本的IDE和 提交的问题 为了让这个版本更好!
地址消毒剂
地址消毒剂(ASan)是一种非常有价值的技术,用于发现和修复内存错误。下面是一个简单的例子:
它最初是为 LLVM/Clang编译器 . 从版本16.1开始,我们将该技术引入VisualStudio2019 针对Linux ,那么 添加了MSVC支持 在版本16.4中。现在有了版本16.9,我们已经解决了超过50个客户报告的错误,并改善了用户体验,我们已经准备好 宣布我们正在将ASan for Windows体验移出实验状态 . 我们认为该功能稳定,可用于生产环境。当我们最后一次在博客上谈论 AddressSanitizer for Windows 16.7版体验 ,我们宣布了x64和调试目标支持。从那时起,我们简化了编译模型,通过在 /fsanitize=address
指定了编译器标志。现在,大多数用户只需要添加一个标志就可以得到ASan,而不需要额外的标志或链接器选项。我们还通过清理运行时生成的异常和修复行号不匹配来改善调试体验。
ASan有助于捕捉各种内存问题,所有这些问题都会对运行程序产生实际影响。这些问题的范围从“经典”到更微妙的问题,如局部变量离开作用域后的使用。我们提供了 关于如何开始使用ASan的文档 在各种构建环境(MSBuild、CMake和命令行)中使用visualstudio,其中任何环境都只需要一些小的更改。请继续阅读,了解ASan是什么,以及它如何帮助您开发软件。
价值
我们非常感谢LLVM/Clang的核心ASan技术和优势。把这些好处带给MSVC客户,看看它是如何帮助发现和调查大量bug的,真是令人兴奋。一些例子:
- 为了验证ASan特性,我们在ASan选项打开的情况下运行了测试套件。测试套件包括Electron、Qt Creator、Eigen、FLAC、postgresql、OpenSSL和大约30个其他项目。
- 我们用ASan构建了MSVC编译器,并运行了一些关键测试。这帮助我们识别C++工具链中的错误。此外,当我们调查社区报告的MSVC错误时,它可以节省我们确定问题的时间。
- Windows团队正在用ASan和 一根绒毛 他们的团队在ASan for Windows体验中帮助确定和解决了问题。
- 我们正在扩大微软内部使用ASan的努力,包括在Windows和Office组织中。
我们将在以后的一些博客文章中更多地讨论上述主题。我们也 贡献 我们对MSVC和clangupstream之间共享的ASan组件所做的更改是共享OSS repo。 我们最新的减贫战略已经提交审查 ,添加了对跟踪通过低级Windows api进行的分配的支持。我们预计,未来的修复和增强将有更多。我们的北极星将始终贡献和使用相同的OSS ASan组件。
此外,在版本16.9中,我们将VisualStudioIDE与ASan完全集成。现在您可以在一流的visualstudio调试体验中获得ASan技术的核心价值。在开始的图片中,您将看到visualstudio如何指向ASan检测到的bug,以及解释性的弹出窗口、调用堆栈和您期望的所有其他调试信息。我们已经详细记录了 调试器集成 ,并且基于文本的ASan报告仍然可以在高级用户的输出窗口中使用。
除了本地dev循环之外,我们还添加了保存ASan崩溃转储的功能,从而支持全新的云和分布式测试场景。关于这个场景的深入研究可以在我们的网站上找到 文档 .
入门
如果你想跳进去自己试试,看看我们的网站 文档 .
旅途愉快,谢谢!
将ASan作为一流的体验引入visualstudio需要时间。当然,我们非常感谢创建并继续开发ASan的LLVM/Clang团队,我们也非常感谢许多客户在ASan处于试验阶段时接受了我们的邀请,并帮助我们提高了它的质量。假阳性,即ASan报告的内存错误不是真正的内存错误,我们以最高优先级处理,并尽可能快地修复这些错误。假阴性,即ASan应该报告问题但没有报告的地方,本质上很难发现,但幸运的是破坏性较小;为了使ASan的价值最大化,我们还努力快速修复这些问题。我们一直在努力解决最近报道的问题。虽然我们当然希望ASan集成质量满足您的要求,但我们已经记录了 逃生舱口 “在罕见的情况下,有选择地关闭ASan,你会碰到一个bug。
我们认为ASan只是将更多的消毒剂和相关技术引入visualstudio的开始。如果您对未定义的行为、内存、线程或其他消毒剂的未来有什么想法,请将它们作为 开发商社区建议 ! 如果您怀疑您遇到了问题或bug,请不要犹豫 在开发者社区开罚单 !
感谢阅读!