微软C++构建工具在Visual Studio 2026中预览支持ARM64目标的AddressSanitizer(ASan),可检测内存错误并提升安全性,支持x86/x64交叉编译。需在项目属性中启用ASan,欢迎反馈建议。
在 C++ 开发中,内存越界问题难以排查。使用 Google 的 Address Sanitizer (ASan) 工具可以有效定位内存错误。通过编译参数 -fsanitize=address 启用 ASan,能够检测堆越界等错误,并提供详细的错误信息和堆栈跟踪,从而提高代码的安全性和稳定性。
文章讨论了Sanitizer在二进制层面的现状与挑战,重点分析了Address Sanitizer和Binary Thread Sanitizer的实现及其局限性,包括信息丢失、性能开销和可移植性等问题,提出了成功标准,并探讨了将现有Sanitizer移植到二进制层面的可行性。
Visual Studio 17.6引入了新的“checked build”功能,使用Address Sanitizer运行时的C和C++。新功能名为continue_on_error(COE),可以诊断和报告隐藏的内存安全错误,且没有误报。开发人员可以通过设置环境变量来启用COE功能,并将内存安全错误流式传输到stdout、stderr或日志文件。COE功能允许应用程序在报告独特的内存安全错误的同时继续运行。编译器会对二进制文件进行仪器化,以与address sanitizer运行时配合使用,现有的测试可以用于发现隐藏的内存安全错误。COE为在Windows上发布C和C++应用程序提供了简单的通过/不通过门槛。该功能显著减少了内存安全错误,如果报告了任何隐藏错误,则不应发布。鼓励开发人员尝试该功能并提供反馈。
内存访问错误是最常见的软件错误,常常造成程序崩溃。程序员们一直在找寻优秀的内存访问错误检测工具,以便及时定位和排除错误以提高软件的可靠性。2012年由谷歌工程师开发的一款AddressSanitizer工具,以其覆盖面广、高效率和低开销的特性,已成为C/C++程序员们的首选。这里对其原理和使用方法做一个简要的介绍。
完成下面两步后,将自动完成登录并继续当前操作。