【问题标题】:Enabling AddressSanitizer with Cmake使用 Cmake 启用 AddressSanitizer
【发布时间】:2021-01-13 23:59:48
【问题描述】:

我有一个由 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")

但它在某些方面不起作用(它没有显示我在哪里有内存泄漏)。我用一个肯定包含内存泄漏的测试应用程序进行了测试,仍然没有发生任何事情。有人能解释一下我该怎么做吗?

【问题讨论】:

  • 你试过 -lasan 吗?
  • @OznOg 我应该把它放在哪里?
  • 在您的链接标志中
  • @OznOg 应该是“设置 (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS_DEBUG} -lasan -fno-omit-frame-pointer -fsanitize=address")”吗?
  • 变量CMAKE_LINKER_FLAGS_DEBUG对CMake没有特殊意义。要为可执行目标设置链接器标志,请使用CMAKE_EXE_LINKER_FLAGS_DEBUG

标签: c++ cmake address-sanitizer


【解决方案1】:

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

target_link_libraries(MyTarget PRIVATE -fsanitize=address)

来自this answer,使用 cmake 3.6 测试

【讨论】:

    【解决方案2】:

    尝试不带_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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-03
      • 2021-02-14
      • 2016-10-24
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多