我正在我的项目中尝试将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
答案 0 :(得分:0)
我相信gcc 6是支持Asan恢复模式的最早版本。 Nov 2015中添加了此模式,而GCC 5是2015年4月发布的。
您可以install GCC 6或使用Clang。