gcov 没有生成所有 gcda 文件
gcov not generating all gcda files
我已经尝试了很多我创建的解决方案,但 none 当时的工作。我正在为一个项目编写一个新代码,但是这段代码被很多硕士和博士学位所触动,他们不在乎使其可读性。因此,确实有很多东西没有用,甚至没有用过。
然后我开始研究 gcov 和 lcov,但是在我生成 .info 文件并加载到 lcov html 之后,除了我的所有文件外,它只跟踪主文件!甚至知道用了很多其他的函数和文件!
(真的很抱歉我的英语不好,我来自巴西亚马逊马瑙斯,英语不是很好!但是我花了一个月的时间寻找这个答案,尝试了很多东西,但一点运气都没有)
我的文件看起来像:
-src/
-core/
-Index.cpp/h
-PostingList.cpp/h
-PreProcessor.cpp/h
-methods/
...
-parser/
...
-run/
...
-structures/
...
-utils/
...
我在项目源目录中得到了一个 CMakeFile.txt,如下所示:
cmake_minimum_required (VERSION 2.4)
project (queryProcessor)
include("${${PROJECT_NAME}_SOURCE_DIR}/globalVariables.cmake")
include_directories(${INCLUDES})
link_directories(${LIBS})
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
add_subdirectory(src)
add_executable(QueryProcessor src/run/queryProcessor.cpp)
target_link_libraries (QueryProcessor libQueryProcessor rt -fprofile-arcs)
add_definitions(-O2 )
还有一个位于 src 目录中,如下所示:
aux_source_directory( utils UTILS )
aux_source_directory( parser PARSER )
aux_source_directory( methods METHODS )
aux_source_directory( structures STRUCTURES )
aux_source_directory( core CORE )
aux_source_directory( . SRC )
aux_source_directory( ../../libs-iw/indexer/include UTILS2 )
add_library( libQueryProcessor ${UTILS} ${UTILS2} ${SRC} ${PARSER} ${METHODS} ${STRUCTURES} ${CORE})
set(CMAKE_CXX_FLAGS "--coverage")
include ( ${${PROJECT_NAME}_SOURCE_DIR}/install.cmake )
我们将不胜感激任何帮助,包括对更好的 CMakeFiles 的建议,
提前致谢
抱歉耽搁了。
您需要使用适当的选项编译程序中的每个源文件才能使用 gcov。 documentation 提到了 -fprofile-args -ftest-coverage
,但您可能还想使用其他与分析相关的选项。
所以你需要在所有目标定义之前追加 How to add linker or compile flag in cmake file?中建议的那些标志(即靠近主要CMakeLists.txt
开头的某个地方)你可能想要添加一个 CMake 选项来一次控制这些标志:
option(USE_GCOV "Create a GCov-enabled build." OFF)
...
if (USE_GCOV)
set(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")
set(GCC_COVERAGE_LINK_FLAGS "-lgcov")
endif()
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )
...
add_subdirectory(...)
add_library(....)
add_executable(....)
我已经尝试了很多我创建的解决方案,但 none 当时的工作。我正在为一个项目编写一个新代码,但是这段代码被很多硕士和博士学位所触动,他们不在乎使其可读性。因此,确实有很多东西没有用,甚至没有用过。
然后我开始研究 gcov 和 lcov,但是在我生成 .info 文件并加载到 lcov html 之后,除了我的所有文件外,它只跟踪主文件!甚至知道用了很多其他的函数和文件!
(真的很抱歉我的英语不好,我来自巴西亚马逊马瑙斯,英语不是很好!但是我花了一个月的时间寻找这个答案,尝试了很多东西,但一点运气都没有)
我的文件看起来像:
-src/
-core/
-Index.cpp/h
-PostingList.cpp/h
-PreProcessor.cpp/h
-methods/
...
-parser/
...
-run/
...
-structures/
...
-utils/
...
我在项目源目录中得到了一个 CMakeFile.txt,如下所示:
cmake_minimum_required (VERSION 2.4)
project (queryProcessor)
include("${${PROJECT_NAME}_SOURCE_DIR}/globalVariables.cmake")
include_directories(${INCLUDES})
link_directories(${LIBS})
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
add_subdirectory(src)
add_executable(QueryProcessor src/run/queryProcessor.cpp)
target_link_libraries (QueryProcessor libQueryProcessor rt -fprofile-arcs)
add_definitions(-O2 )
还有一个位于 src 目录中,如下所示:
aux_source_directory( utils UTILS )
aux_source_directory( parser PARSER )
aux_source_directory( methods METHODS )
aux_source_directory( structures STRUCTURES )
aux_source_directory( core CORE )
aux_source_directory( . SRC )
aux_source_directory( ../../libs-iw/indexer/include UTILS2 )
add_library( libQueryProcessor ${UTILS} ${UTILS2} ${SRC} ${PARSER} ${METHODS} ${STRUCTURES} ${CORE})
set(CMAKE_CXX_FLAGS "--coverage")
include ( ${${PROJECT_NAME}_SOURCE_DIR}/install.cmake )
我们将不胜感激任何帮助,包括对更好的 CMakeFiles 的建议, 提前致谢
抱歉耽搁了。
您需要使用适当的选项编译程序中的每个源文件才能使用 gcov。 documentation 提到了 -fprofile-args -ftest-coverage
,但您可能还想使用其他与分析相关的选项。
所以你需要在所有目标定义之前追加 How to add linker or compile flag in cmake file?中建议的那些标志(即靠近主要CMakeLists.txt
开头的某个地方)你可能想要添加一个 CMake 选项来一次控制这些标志:
option(USE_GCOV "Create a GCov-enabled build." OFF)
...
if (USE_GCOV)
set(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")
set(GCC_COVERAGE_LINK_FLAGS "-lgcov")
endif()
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )
...
add_subdirectory(...)
add_library(....)
add_executable(....)