使用Cmake启用AddressSanitizer

时间:2018-06-17 13:22:47

标签: c++ cmake address-sanitizer

我有一个由cmake建立的项目。我想用AddressSanitizer构建它来检测内存泄漏。我将这些行添加到CMakeLists.txt中:

set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")

但它不起作用(它没有显示我有内存泄漏的地方)。我测试了一个肯定包含内存泄漏的测试应用程序,但仍然没有发生任何事情。有人可以解释我该怎么做?

2 个答案:

答案 0 :(得分:1)

作为另一种选择,可以向目标添加消毒剂:

target_link_libraries(MyTarget PRIVATE -fsanitize=address)

来自 this answer,用 cmake 3.6 测试

答案 1 :(得分:0)

尝试不包含_DEBUG的标志。

    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
    set (CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address")