C++ 使用Cmake启用AddressSanitizer

C++ 使用Cmake启用AddressSanitizer,c++,cmake,address-sanitizer,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

我有一个由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")
但它不起作用,因为它无法显示内存泄漏的位置。我测试了一个测试应用程序,它肯定包含内存泄漏,但仍然没有发生任何事情。有人能解释一下我该怎么做吗?

尝试不带调试的标志


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

target_link_libraries(MyTarget PRIVATE -fsanitize=address)

从中获取,使用cmake 3.6进行测试

您尝试过-lasan吗?@OznOg我应该把它放在哪里?在您的链接中flags@OznOg是否应该设置CMAKE\u LINKER\u FLAGS\u DEBUG${CMAKE\u STATIC\u LINKER\u FLAGS\u DEBUG}-lasan-fno省略帧指针-fsanize=address?变量CMAKE\u LINKER\u FLAGS\u DEBUG对CMAKE没有特殊意义。用于设置可执行目标使用的链接器标志。
target_link_libraries(MyTarget PRIVATE -fsanitize=address)