Включение AddressSanitizer с помощью Cmake

У меня есть проект, созданный с помощью 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")

Но это как-то не работает (не показывает, где у меня утечка памяти). Я протестировал тестовое приложение, которое определенно содержит утечки памяти, но ничего не произошло. Может кто-нибудь объяснить, как мне это сделать?


person Tuấn Phạm    schedule 17.06.2018    source источник
comment
ты пробовал -ласан?   -  person OznOg    schedule 17.06.2018
comment
@OznOg, куда мне его положить?   -  person Tuấn Phạm    schedule 17.06.2018
comment
в ваших флагах ссылок   -  person OznOg    schedule 17.06.2018
comment
@OznOg Должен ли он быть установлен (CMAKE_LINKER_FLAGS_DEBUG ${CMAKE_STATIC_LINKER_FLAGS_DEBUG} -lasan -fno-omit-frame-pointer -fsanitize=address)?   -  person Tuấn Phạm    schedule 17.06.2018
comment
Переменная CMAKE_LINKER_FLAGS_DEBUG не имеет особого значения для CMake. Чтобы установить флаги компоновщика для исполняемой цели, используйте CMAKE_EXE_LINKER_FLAGS_DEBUG.   -  person Tsyvarev    schedule 17.06.2018
comment
@Tsyvarev Это не работает :(   -  person Tuấn Phạm    schedule 17.06.2018
comment
Если вы собираете проект с помощью make (после вызова cmake), вы можете запустить make VERBOSE=1 для просмотра командных строк, используемых для компиляции и компоновки. Сравните их с командными строками, предложенными для использования address-sanitizer.   -  person Tsyvarev    schedule 17.06.2018


Ответы (2)


В качестве другого варианта можно добавить дезинфицирующие средства для цели:

target_link_libraries(MyTarget PRIVATE -fsanitize=address)

Получено из этот ответ, проверено с помощью cmake 3.6

person PolyGlot    schedule 13.01.2021

попробуйте флаги без _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")
person Maksym Rudenko    schedule 27.08.2020