【发布时间】:2021-10-15 15:40:14
【问题描述】:
在我目前(基本上)正在做的(基于 Linux 的)CI/CD 管道中:
- 构建版本(cmake out-of-source-build)
- 测试/(自定义)模糊构建
- 以构建仪器为重点 = gcov + ASan(再次:cmake)
- 测试/(自定义)模糊构建
- 进程覆盖率 (gcovr)
目前基于 GCC 10。
在考虑添加基于 Sonarqube 的分析时(这意味着使用构建包装器,希望它与描述的一样非侵入性 -> 由于有些害怕,我什至考虑了第三次构建!),我想知道原始方法我已经采取了:
将代码覆盖率和内存清理工具融合到一个构建中是否安全/正确/一个好主意?
与独立构建相比,我是否有可能丢失 某些东西(例如 ASan 推理的能力、覆盖计数准确性、非线性减速)(遗憾的是,这增加了我们需要的时间运行两次测试)?
编辑:
对于它的价值,关于它对我的意义使用 gcov/asan 的更多细节(是的:它不像 cmake-def 的其他部分那样干净):
# Code Coverage Analysis
option(ENABLE_CODE_COVERAGE_ANALYSIS "Enable instrumentalization-based code-coverage" OFF)
if (${ENABLE_CODE_COVERAGE_ANALYSIS})
message(STATUS "Instrumentalize for code-coverage analysis.")
add_definitions(--coverage)
set(COV_LINKING gcov)
endif()
# ASAN Memory Sanitization
option(ENABLE_ASAN "Enable ASAN" OFF)
if (${ENABLE_ASAN})
message(STATUS "Instrumentalize for ASAN")
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
# suppress GRPC ASAN stuff
# https://github.com/grpc/grpc/pull/22325/files
add_definitions("-DGRPC_ASAN_SUPPRESSED")
endif()
【问题讨论】:
标签: c++ gcc g++ gcov address-sanitizer