官宣:用于MSVC的Address Sanitizer正式发布

官宣:用于MSVC的Address Sanitizer正式发布

作者:BlogUpdater |  时间:2021-03-16 |  浏览:1445 |  评论已关闭 条评论

官宣一则
特别感谢Aaron Gorenstein对本文内容的贡献。特别感谢Kevin Cadieux和Jim Radigan的贡献。

我们非常高兴地宣布:C++ Address Sanitizer(ASan)在Visual Studio 2019 v16.9中正式可用。感谢那些在早期的测试版本中参加体验的开发者,是你们的反馈和建议帮助我们不断的去改善此项功能。

Address Sanitizer
Address Sanitizer(ASan)是一款用来查找和修复有关内存相关的Bug的强大技术,下面我们快速地来看下功能演示:

最初,它是为了LLVM/Clang编译器设计和开发的。从VS2019 v16.1开始,我们将这项技术迁移到了Linux目标平台,然后就是在v16.4中我们添加了对MSVC编译器的支持。现在,在最新的v16.9中,我们修复了多达50多个使用者报告的Bug,并且进一步地提升了使用体验。
我们认为,现在应该可以将此项技术用在正式的生产环境了。上一次我们的博文中,有提到v16.7中16.7版本中Windows平台上的使用体验,那个时候,我们官宣了它对x64和调试版本的支持。
从那个时候开始,我们通过自动链接运行时库(通过使用)来简化了编译模型以匹配LLVM编译器。现在,大多数用户只需要添加一个单一的标志就可以获得ASan了,而不需要指定额外的编译及链接开关。我们还通过清理运行时生成的异常和修复行号的匹配问题,进一步地打磨了调试体验。

ASan可以帮助开发者发现内存有关的问题,这些问题的发现和解决,对于产品的质量来说十分重要。从经典的”内存释放后继续使用”到一些比较复杂少见的”局部变量销毁后继续使用”,ASan都可以帮助你规避这类问题。如果需要了解更多信息,请参考ASan的技术文档。

价值
我们非常感谢LLVM/Clang充分确立了ASan的核心技术和优势。将这些好处带给MSVC客户,这真是令人兴奋,并看到它如何可以帮助发现和调查许多错误。下面是一些例子:

> 为了验证ASan功能,我们在启用ASan选项的情况下运行了测试套件。该测试套件包括Electron,Qt Creator,Eigen,FLAC,postgresql,OpenSSL和大约30个其他项目。

> 我们使用ASan构建了MSVC编译器本身,并运行了一些关键测试。这有助于我们识别C++工具链中的错误。此外,当我们分析开发社区报告的MSVC错误时,这还节省了我们识别问题的时间。

> Windows团队正在使用ASan和OneFuzz对其代码库进行模糊处理,他们的团队在识别和修复Windows的ASan中的问题方面发挥了重要作用。

> 我们正在Microsoft内部(包括Windows和Office组织)扩大使用ASan。

我们将在以后的一些博客文章中对上述主题进行更多介绍。我们还一直致力于对共享的OSS存储库上游的MSVC和Clang之间共享的ASan组件所做的更改。我们最新的PR已提交审核,增加了对通过低级Windows API进行的跟踪分配的支持。我们希望在将来的修复和增强中会有更多。我们的北极星将始终致力于和使用相同的OSS ASan组件。

此外,在16.9版中,我们具有与ASan的完整Visual Studio IDE集成。现在,你可以在Windows上一流的Visual Studio调试经验中获得ASan技术的核心价值。

在开头的图片中,你将看到Visual Studio如何正确指向ASan检测到的错误,并附有说明性弹出窗口,调用堆栈以及所有其他调试信息。我们已经记录了调试器集成的更多详细信息,并且高级用户仍然可以在“输出”窗口中找到基于文本的ASan报告。

除了本地开发生命周期之外,我们还添加了保存ASan故障转储的功能,从而启用了全新的云和分布式测试方案,更多信息请参考ASan文档。

总结
感谢老大哥技术的不断更新换代,以前查找内存错误十分辛苦,有了这玩意儿,应该会舒坦一些吧?
神州行,我看行。

最后
Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《Address Sanitizer for MSVC Now Generally Available》

标签:

评论已关闭。