不支持Address Sanitizer选项“ -fsanitize-recover = address”

时间:2018-11-20 10:45:35

标签: gcc cmake address-sanitizer

我正在我的项目中尝试将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

1 个答案:

答案 0 :(得分:0)

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

您可以install GCC 6或使用Clang。