更正了 gcov 在可执行文件和静态库上的用法

Corrected usage of gcov on executable and static library

我有一个使用 gcov 的非常简单的例子:

所有这些都是通过一个简单的 bash 脚本完成的:

g++ -c library.cpp -Wall -fprofile-arcs -ftest-coverage -o library.o
ar rvs library.a library.o
g++ main.cpp -Wall -fprofile-arcs -ftest-coverage library.a -o main

此时我有以下文件(忽略源和构建脚本):

library.o
library.gcno
library.a

main.cpp
main
main.gcno

到目前为止一切顺利。现在我 运行 我的 main 可执行文件,它创建:

main.gcda
library.gcda

一切如预期。现在的问题 - 当我 运行 gcov main.cpp 时,我没有得到 library.cpp 的任何 gcov 文件。这是预期的吗?

我真的需要在任何时间点对我可能拥有的每个源文件调用 gcov 吗?有没有办法调用第一个源文件,即 main.cpp 并让它为每个源 main 继续调用生成覆盖率统计信息?

我似乎获得了很多 main.cpp 使用的核心库代码的 gcov 文件,而无需直接用 gcov (ostream.gov, locale.gcov...) 调用它们不是 library.gcov

通常你会打电话给 gcov *.gcno