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