目前我们将gcov与我们的Linux C++应用程序测试套件一起使用,它在测量线路覆盖率方面做得很好.
除了线路覆盖之外,gcov能否生成功能/方法覆盖报告?
看看参数gcov接受我不认为这是可能的,但我可能会遗漏一些东西.或者,可能是否有其他工具可以从gcc生成的统计数据中生成函数/方法覆盖率报告?
更新:按功能/方法覆盖率,我指的是在测试期间执行的函数的百分比.
我正在尝试使用iPhone模拟器来分析我的代码.我启用了生成测试覆盖率文件和仪器程序流程,并将-lgcov添加到链接器标志.根据我读过的所有内容,应该是我在设置方面需要做的所有事情.
更新:生成测试覆盖率文件触发-ftest-coverage标志,仪器程序流触发-fprofile-arcs标志.我检查了构建日志,并在编译时设置它们.
执行程序我可以看到.gcno文件出现在旁边.o build/.build/Debug-iphonesimulator/.build/Objects-normal/i386目录中的编译代码.
但是当我在模拟器中运行应用程序时,我没有出现任何*.gcda文件.
我的理解是这些文件包含来自仪器的数据.但我无法在计算机上的任何地方找到它们.
我知道它们可以生成并出现在*.gcno文件旁边,因为我有一个旧的已删除的构建目录,它有它们.我无法弄清楚我必须做些什么来让它们出现并记录下来.
任何帮助赞赏.
我使用的是ubuntu 10.1,g ++编译器.
我试图将gcov和lcov用于我的C++项目.我设法编译gcov:
g++ -fprofile-arcs -ftest-coverage main.cpp user.cpp game.cpp
Run Code Online (Sandbox Code Playgroud)
没有错误或警告消息.接下来我尝试运行gcov:
gcov main.cpp user.cpp game.cpp
Run Code Online (Sandbox Code Playgroud)
还好.我也尝试运行我的程序:
./a.out
Run Code Online (Sandbox Code Playgroud)
并再次运行gcov,我的主要用户和game.cpp现在显示一些百分比.我想捕获数据,我在终端输入:
lcov --directory /home/projects/Game1/ -c -o application.info
Run Code Online (Sandbox Code Playgroud)
但它给了我这个:
Capturing coverage data from /home/projects/Game1/
geninfo: ERROR: cannot read /home/projects/Game1/!
Run Code Online (Sandbox Code Playgroud)
我在网上搜索,阅读lcov文档,我找不到答案.有人可以帮帮我吗?
另外,我也无法打开main.gcda文件.(我尝试使用文本编辑器打开,它说一些字符编码问题,非常多:UTF-8,Western(ISO-8859-1),Western(ISO-8859) -11)等,但仍然无法打开并读取文件.
请帮帮我..谁?
编辑:
我承认,这是我的错误(我非常抱歉,"home/Projects/Game1",资本为"P".)在验证路径后,我收到了这个新错误:
geninfo: ERROR: /home/Projects/Game1/main.gcno: reached unexpected end of file
Run Code Online (Sandbox Code Playgroud) 我使用升压测试进行单元测试,使用gcov和lcov测量覆盖率.
unfortuanlly genhtml为函数覆盖生成类似的报告:

我现在想知道函数_ZN7UtilLib11ProgressBarC2EjdRSo究竟是什么.
到目前为止,我无法将此函数与ProgressBar的任何类接口相关联:
class ProgressBar {
public:
explicit ProgressBar(
unsigned int expected_count,
double updateInterval = 30,
std::ostream& os = std::cout);
unsigned int operator+=(unsigned int increment);
unsigned int operator++();
unsigned int operator++(int i);
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我如何使用gcov获得更好的函数名称或者如何理解这些函数名称.
该应用程序使用gcc4.7编译,带有以下标志:-g -g -save-temps=obj -Wall -Wextra -Wno-unused-parameter -Wno-error=unused-parameter -O0 -pedantic
我正在使用一个名为KLEE的测试生成工具,它为我的C99-Code创建了大量测试.然后我运行测试并用gcov检查线路覆盖.Gcov似乎在成功完成后在运行结束时更新覆盖数据.
但是,某些测试失败(断言声明不正确),导致程序中止,而gcov不计算此运行中涵盖的行.
有没有办法让gcov刷新任何退出的信息(不仅仅是成功)?
我正在尝试理解gcov工具的输出.没有选项运行它是有道理的,但我想尝试理解分支覆盖选项.不幸的是,很难理解分支机构的作用以及为什么不采用它们.下面是方法的输出(使用最新的LLVM/Clang构建进行编译).
function -[TestCoverageAppDelegate loopThroughArray:] called 5 returned 100% blocks executed 88%
5: 30:- (NSInteger)loopThroughArray:(NSArray *)array {
5: 31: NSInteger i = 0;
22: 32: for (NSString *string in array) {
branch 0 taken 0
branch 1 taken 7
-: 33:
22: 34: }
branch 0 taken 4
branch 1 taken 3
branch 2 taken 0
branch 3 taken 3
5: 35: return i;
-: 36:}
Run Code Online (Sandbox Code Playgroud)
我通过这个运行5次测试,传入nil,一个空数组,一个包含1个对象的数组,一个包含2个对象的数组和一个包含4个对象的数组.我可以猜测,在第一种情况下,分支1意味着"进入循环",但我不知道分支0是什么.在第二种情况下,分支0似乎再次循环,分支1似乎结束循环,分支3继续/退出循环,但我不知道分支2是什么或为什么/什么时候执行它.
如果有人知道如何破译分支信息,或者知道任何有关这一切的详细文档,我会很感激帮助.
我为非POSIX嵌入式系统编写项目,所以我不能使用gcc选项--coverage(我没有读或写).我还能做些什么来产生类似输出的gcov.我有一个输出功能.
我使用gcov进行代码覆盖分析,使用lcov生成覆盖的图形输出.这适用于已执行目标文件的至少一部分的代码文件.我希望能够跟踪尚未执行的文件.我怀疑这与不为这些文件生成的.gcda文件有关.有没有办法强制生成所有目标文件的.gcda文件,而不管执行情况如何?
我正在使用gcov来衡量我所贡献的c ++库的测试覆盖率.出于某种原因,gcov没有将许多文件中的行识别为可执行文件.在给定文件中的160行中,它会说其中40行是可执行的.例如:
-: 0:Source:../evo/NK.h
-: 0:Graph:test_driver.gcno
-: 0:Data:test_driver.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:// This file is part of Empirical, https://github.com/devosoft/Empirical
-: 2:// Copyright (C) Michigan State University, 2016.
-: 3:// Released under the MIT Software license; see doc/LICENSE
-: 4://
-: 5://
-: 6:// This file provides code to build NK-based algorithms.
-: 7:
-: 8:#ifndef EMP_EVO_NK_H
-: 9:#define EMP_EVO_NK_H
-: 10:
-: 11:#include <array>
-: 12:
-: 13:#include "../tools/BitVector.h"
-: 14:#include "../tools/const_utils.h"
-: 15:#include "../tools/Random.h"
-: 16:#include "../tools/vector.h" …Run Code Online (Sandbox Code Playgroud) 今天我将我的矩阵类重写为constexpr. 我对这个类有 100% 的单元测试覆盖率,但我注意到在将几乎所有函数转换为 constexpr 后,构造函数的一部分在 lcov 中被标记为根本不再被覆盖。
这是只有构造函数的类。
template<typename T, std::size_t m, std::size_t n>
class Matrix
{
static_assert(std::is_arithmetic<T>::value,
"Matrix can only be declared with a type where "
"std::is_arithmetic is true.");
public:
constexpr Matrix(
std::initializer_list<std::initializer_list<T>> matrix_data)
{
if (matrix_data.size() != m)
{
throw std::invalid_argument("Invalid amount of rows.");
}
for (const auto& col : matrix_data)
{
if (col.size() != n)
{
throw std::invalid_argument("Invalid amount of columns.");
}
}
std::size_t pos_i = 0;
std::size_t pos_j = 0;
for (auto …Run Code Online (Sandbox Code Playgroud)