首页 > 解决方案 > 不支持地址清理程序选项“-fsanitize-recover=address”

问题描述

我正在尝试在我的项目中将 Address Sanitizer 与 gcc 一起使用。

因此,我在编译器和链接器中添加了所需的标志:

ADD_COMPILE_OPTIONS(-O0 -g -Wall -fsanitize=address -fno-omit-frame-pointer)
SET(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")

Address Sanitizer 在此之后工作,但它在第一个错误后中止我的应用程序。即使在报告错误后,我也希望 Address Sanitizer 继续运行。因此,我又添加了一个标志,如下所示(根据链接https://github.com/google/sanitizers/wiki/AddressSanitizer):

ADD_COMPILE_OPTIONS(-O0 -g -Wall -fsanitize=address -fsanitize-recover=address -fno-omit-frame-pointer)

在此之后,我收到不支持此恢复标志的错误:

Problems were encountered while collecting compiler information:
cc1plus: error: -fsanitize-recover=address is not supported

PS:我的 gcc 版本是 gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609

标签: gcccmakeaddress-sanitizer

解决方案


我相信 gcc 6 是最早支持 Asan 恢复模式的版本。此模式于 2015 年11 月添加,而 GCC 5 于 2015 年 4 月发布。

您可以安装 GCC 6或使用 Clang。


推荐阅读