官宣:用于MSVC的Address Sanitizer正式发布
官宣一则
特别感谢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》
相关推荐
- 绘制一张透明背景的单色位图
- Posted on 12月29日
- 软件的可用性改善:善用帮助信息
- Posted on 08月30日
- 窗口最小化后获取窗口的大小和位置
- Posted on 06月05日
- 参考: DRAWITEMSTRUCT中的itemState
- Posted on 09月01日
评论已关闭。