英语法语德语意大利语葡萄牙语俄语西班牙语

OnWorks 网站图标

mips64el-linux-gnuabi64-gcov-5 - 云端在线

在 OnWorks 免费托管服务提供商中通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器运行 mips64el-linux-gnuabi64-gcov-5

这是命令 mips64el-linux-gnuabi64-gcov-5 可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

名称


gcov - 覆盖率测试工具

概要


冠状病毒 [-v|- 版[-h| - 帮帮我]
[-a|--所有块]
[-b|--分支概率]
[-c|--分支计数]
[-d|--显示进度]
[-f|--功能摘要]
[-i|--中间格式]
[-l|--长文件名]
[-m|--demangled-names]
[-n|--无输出]
[-o|--对象目录 目录|文件]
[-p|--保留路径]
[-r|--仅相对]
[-s|--source-前缀 目录]
[-u|--无条件分支]


商品描述


冠状病毒 是一个测试覆盖程序。 与 GCC 一起使用它来分析您的程序
帮助创建更高效​​、更快运行的代码并发现未测试的部分
程序。 您可以使用 冠状病毒 作为分析工具,帮助发现您的优化位置
努力将最好地影响您的代码。 你也可以使用 冠状病毒 连同其他分析
工具, 教授, 以评估代码的哪些部分使用了最多的计算时间。

分析工具可帮助您分析代码的性能。 使用分析器,例如 冠状病毒
or 教授,可以查到一些基本的性能统计信息,例如:

* 每行代码执行的频率

* 实际执行了哪些代码行

* 每段代码使用多少计算时间

一旦您了解了有关代码在编译时如何工作的这些事情,您就可以查看每个
模块以查看应优化哪些模块。 冠状病毒 帮助您确定工作地点
关于优化。

软件开发人员还结合测试套件使用覆盖测试,以确保
软件实际上足以发布。 测试套件可以验证程序
按预期工作; 覆盖程序测试以查看有多少程序被执行
测试套件。 然后开发人员可以确定需要添加哪些类型的测试用例
测试套件以创建更好的测试和更好的最终产品。

如果您打算使用,则应该在没有优化的情况下编译代码 冠状病毒 因为
优化,通过将一些代码行组合成一个函数,可能不会给你那么多
您需要查找代码使用大量“热点”的信息
电脑时间。 同样,因为 冠状病毒 按行累积统计信息(在最低
分辨率),它最适合只在每个语句上放置一个语句的编程风格
线。 如果您使用扩展为循环或其他控制结构的复杂宏,
统计数据不太有用——它们只报告宏调用所在的行
出现。 如果你的复杂宏表现得像函数,你可以用内联替换它们
功能来解决这个问题。

冠状病毒 创建一个名为的日志文件 源文件.gcov 这表明每行多少次
一个源文件 源文件.c 已执行。 您可以将这些日志文件与 教授
有助于微调程序的性能。 教授 给你计时信息
可以与您从中获得的信息一起使用 冠状病毒.

冠状病毒 仅适用于使用 GCC 编译的代码。 它与任何其他分析不兼容
或测试覆盖机制。

配置


-h
- 帮帮我
显示有关使用的帮助 冠状病毒 (在标准输出上),然后不做任何事情就退出
进一步处理。

-v
- 版
显示 冠状病毒 版本号(在标准输出上),不做任何事情就退出
进一步处理。

-a
--所有块
为每个基本块编写单独的执行计数。 通常 gcov 输出
执行仅对一行的主要块进行计数。 使用此选项,您可以
确定单行中的块是否没有被执行。

-b
--分支概率
将分支频率写入输出文件,并将分支摘要信息写入输出文件
标准输出。 此选项允许您查看程序中每个分支的频率
被拿走。 不会显示无条件分支,除非 -u 给出了选项。

-c
--分支计数
将分支频率写为采用的分支数量,而不是百分比
采取的分支。

-n
--无输出
不要创建 冠状病毒 输出文件。

-l
--长文件名
为包含的源文件创建长文件名。 例如,如果头文件 xh
包含代码,并被包含在文件中 交流电,然后运行 冠状病毒 在文件上 交流电
将产生一个名为的输出文件 ac##xhgcov 而不是 冠状病毒。 这可以
有用的话 xh 包含在多个源文件中并且您想查看单个
贡献。 如果您使用 -p 选项,包含和包含的文件名
将是完整的路径名。

-p
--保留路径
在生成的名称中保留完整的路径信息 .gcov 文件。 没有
这个选项,只使用文件名组件。 使用此选项,所有目录
使用,与 / 字符转换为 # 字符, . 删除了目录组件
并且不可移动 .. 组件重命名为 ^. 如果源文件在
几个不同的目录。

-r
--仅相对
只输出带有相对路径名的源文件信息(在 source 之后
前缀省略)。 绝对路径通常是系统头文件和任何
其中的内联函数通常是无趣的。

-f
--功能摘要
除了文件级摘要之外,还输出每个函数的摘要。

-o 目录|文件
--对象目录 目录
--目标文件 文件
指定包含 gcov 数据文件的目录或对象路径名。
.gcno.gcda 使用此选项搜索数据文件。 如果目录是
指定,数据文件在该目录中并以输入文件名命名,
没有它的扩展名。 如果在此处指定文件,则数据文件以
那个文件,没有它的扩展名。

-s 目录
--source-前缀 目录
生成输出覆盖文件时要删除的源文件名的前缀。
在单独的目录中构建时,此选项很有用,并且路径名
确定输出文件名时不需要源目录。 请注意,这
在确定源文件是否为绝对文件之前应用前缀检测。

-u
--无条件分支
当给出分支概率时,包括无条件分支的概率。
无条件分支通常不有趣。

-d
--显示进度
显示标准输出的进度。

-i
--中间格式
以易于解析的中间文本格式输出 gcov 文件,可供 冠状病毒
或其他工具。 输出是单 .gcov 每个文件 .gcda 文件。 没有源代码
必需的。

中间件格式 .gcov 文件是纯文本,每行一个条目

文件:
功能: , ,
计数: ,
分支: ,

哪里是
notexec(分支未执行)
采取(分支执行和采取)
nottaken(分支已执行,但未采取)

可以有多个中间 gcov 中的条目
文件。 后一个的所有条目与该源文件有关
直到下一个入口。

这是一个示例,当 -i-b 选项​​:

文件:array.cc
函数:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE
功能:22,1,main
lcount:11,1
lcount:12,1
lcount:14,1
分支:14,采取
lcount:26,1
分行:28,未录取

-m
--demangled-names
在输出中显示解构函数名称。 默认是显示 mangled 函数
名称。

冠状病毒 应该以与调用时相同的当前目录运行
编译器。 否则将无法定位源文件。 冠状病毒 产生文件
被称为 错误名称.gcov 在当前目录中。 这些包含覆盖信息
它们对应的源文件。 一 .gcov 为每个源生成文件(或
header) 包含代码的文件,该文件被编译以生成数据文件。 这
乱名 输出文件名的一部分通常只是源文件名,但也可以
如果是更复杂的事情 -l or -p 给出了选项。 参考那些选项
了解详情。

如果你调用 冠状病毒 对于多个输入文件,每个输入文件的贡献是
总和。 通常,您会使用与最终链接相同的文件列表来调用它
你的可执行文件。

.gcov 文件包含 : 分隔字段以及程序源代码。 格式
is

: :

当命令行选项请求时,附加块信息可能在每一行之后。
执行计数 is - 对于不包含代码的行。 未执行的行被标记 #####
or ====, 取决于它们是否可以通过非异常路径或仅
异常路径,例如 C++ 异常处理程序,分别。

开头的一些信息行有 电话号码 零。 这些序言行是
的形式

-:0: :

这些序言行的顺序和数量将增加为 冠状病毒 开发
进步---不要依赖它们保持不变。 用 行李牌 找到一个特定的
序言行。

附加块信息的形式为



信息 是人类可读的,但设计得足够简单以供机器解析
了。

打印百分比时,0% 和 100% 仅在数值为 究竟 0%和
分别为 100%。 其他通常会四舍五入为 0% 或 100% 的值是
而是打印为最接近的非边界值。

使用时 冠状病毒,您必须首先使用两个特殊的 GCC 选项编译您的程序:
-fprofile-arcs -ftest-覆盖. 这告诉编译器生成额外的
gcov 所需的信息(基本上是程序的流程图),还包括
目标文件中的附加代码,用于生成所需的额外分析信息
通过 gcov。 这些附加文件放置在目标文件所在的目录中
位于。

运行该程序将导致生成配置文件输出。 对于每个源文件
编译与 -fprofile-arcs,伴随 .gcda 文件将被放置在目标文件中
目录。

运行 冠状病毒 将程序的源文件名作为参数现在将生成一个列表
代码以及每行的执行频率。 例如,如果您的程序
叫做 tmp.c,这就是你在使用基本的时候看到的 冠状病毒 设施:

$ gcc -fprofile-arcs -ftest-coverage tmp.c
$ a.out
$ gcov tmp.c
90.00% 的 10 行源代码在文件 tmp.c 中执行
创建 tmp.c.gcov。

该文件 tmp.c.gcov 包含输出 冠状病毒。 这是一个示例:

-:0:来源:tmp.c
-:0:图形:tmp.gcno
-:0:数据:tmp.gcda
-:0:运行:1
-: 0:程序:1
-: 1:#include
-:2:
-:3:int main(无效)
1:4:{
1:5:int i,总计;
-:6:
1: 7: 总数 = 0;
-:8:
11: 9: for (i = 0; i < 10; i++)
10: 10: 总计 += i;
-:11:
1:12:如果(总共!= 45)
#####: 13: printf ("失败\n");
-: 14: 其他
1: 15: printf ("成功\n");
1:16:返回0;
-:17:}

当您使用 -a 选项,您将获得单个块计数,并且输出看起来
喜欢这个:

-:0:来源:tmp.c
-:0:图形:tmp.gcno
-:0:数据:tmp.gcda
-:0:运行:1
-: 0:程序:1
-: 1:#include
-:2:
-:3:int main(无效)
1:4:{
1:4块0
1:5:int i,总计;
-:6:
1: 7: 总数 = 0;
-:8:
11: 9: for (i = 0; i < 10; i++)
11:9块0
10: 10: 总计 += i;
10:10块0
-:11:
1:12:如果(总共!= 45)
1:12块0
#####: 13: printf ("失败\n");
$$$$$: 13 块 0
-: 14: 其他
1: 15: printf ("成功\n");
1:15块0
1:16:返回0;
1:16块0
-:17:}

在这种模式下,每个基本块只显示在一行——块的最后一行。 一种
多行块只会影响最后一行的执行次数,其他
不会显示包含代码的行,除非前面的块以这些行结束。 这
显示一行的总执行计数,随后的行显示执行计数
对于在该行结束的单个块。 在每个块之后,分支和调用计数
将显示块的,如果 -b 给出了选项。

由于 GCC 仪器调用的方式,调用计数可以显示在一行之后,没有
单个块。 如您所见,第 13 行包含一个未执行的基本块。

当您使用 -b 选项,您的输出如下所示:

$ gcov -b tmp.c
90.00% 的 10 行源代码在文件 tmp.c 中执行
80.00% 的 5 个分支在文件 tmp.c 中执行
80.00% 的 5 个分支在文件 tmp.c 中至少被采用一次
在文件 tmp.c 中执行的 50.00 个调用的 2%
创建 tmp.c.gcov。

这是结果的示例 tmp.c.gcov 文件:

-:0:来源:tmp.c
-:0:图形:tmp.gcno
-:0:数据:tmp.gcda
-:0:运行:1
-: 0:程序:1
-: 1:#include
-:2:
-:3:int main(无效)
函数 main 调用 1 返回 1 个块执行 75%
1:4:{
1:5:int i,总计;
-:6:
1: 7: 总数 = 0;
-:8:
11: 9: for (i = 0; i < 10; i++)
分支 0 被占用 91%(失败)
分支 1 占用 9%
10: 10: 总计 += i;
-:11:
1:12:如果(总共!= 45)
分支 0 被占用 0%(失败)
分支 1 占用 100%
#####: 13: printf ("失败\n");
调用 0 从未执行
-: 14: 其他
1: 15: printf ("成功\n");
调用 0 调用 1 返回 100%
1:16:返回0;
-:17:}

对于每个函数,都会打印一行显示该函数被调用的次数、调用方式
它返回很多次以及执行了多少百分比的函数块。

对于每个基本块,在描述基本块的最后一行之后打印一行
结束基本块的分支或调用。 可以有多个分支和调用
如果有多个基本块以该行结尾,则为单个源行列出。
在这种情况下,分支和呼叫均被赋予一个编号。 没有简单的方法可以
映射这些分支并回调到源结构。 不过一般来说,最低的
编号的分支或调用将对应于源代码行上最左边的结构。

对于一个分支,如果它至少被执行过一次,那么一个百分比表示执行的次数
分支被执行的次数除以分支被执行的次数将是
打印。 否则,将打印“从未执行过”的消息。

对于一个调用,如果它至少被执行过一次,那么一个百分比表示
返回的调用次数除以调用执行的次数将是
打印。 这通常是 100%,但对于调用“exit”或
“longjmp”,因此每次调用它们时可能不会返回。

执行计数是累积的。 如果没有再次执行示例程序
删除 .gcda 文件,源中每行的次数计数
执行将被添加到前一次运行的结果中。 这可能很有用
在几个方面。 例如,它可用于累积多个数据
程序作为测试验证套件的一部分运行,或提供更准确的长期
大量程序运行的信息。

在该数据 .gcda 文件在程序退出前立即保存。 对于每个
使用编译的源文件 -fprofile-arcs,分析代码首先尝试读入
现有 .gcda 文件; 如果文件与可执行文件不匹配(不同数量的基本
块计数)它将忽略文件的内容。 然后添加新的执行
计数并最终将数据写入文件。

运用 冠状病毒 GCC 优化

如果你打算用 冠状病毒 为了帮助优化您的代码,您必须首先编译您的程序
有两个特殊的 GCC 选项: -fprofile-arcs -ftest-覆盖. 除此之外,你还可以
使用任何其他 GCC 选项; 但是如果你想证明程序中的每一行
已执行,您不应同时进行优化编译。 在某些机器上
优化器可以通过将一些简单的代码行与其他行组合来消除它们。
例如,像这样的代码:

如果 (a != b)
c是1;
其他
c是0;

在某些机器上可以编译成一条指令。 在这种情况下,没有办法
冠状病毒 为每一行计算单独的执行计数,因为没有单独的
每行代码。 因此 冠状病毒 如果你编译了程序,输出看起来像这样
优化:

100:12:如果(a!= b)
100:13:c = 1;
100:14:其他
100:15:c = 0;

输出显示,经过优化组合的这段代码执行了 100 次。
在某种意义上,这个结果是正确的,因为只有一条指令代表
所有这四行。 但是,输出并没有说明结果的次数
是 0,结果是 1 的次数。

内联函数可能会产生意外的行数。 显示行数
可内联函数的源代码,但显示的内容取决于函数所在的位置
内联,或者根本没有内联。

如果函数没有内联,编译器必须发出一个外联副本
函数,在任何需要它的目标文件中。 如果 文件A.o文件B.o 两者都包含
特定内联函数的线体,它们也都包含覆盖
计数为该功能。 什么时候 文件A.o文件B.o 链接在一起,链接器将,
在许多系统上,为对该函数的所有调用选择其中一个,
并删除或忽略另一个。 不幸的是,它不会删除覆盖计数器
对于未使用的函数体。 因此,当进行检测时,该功能的所有用途除外
将显示零计数。

如果函数在多个位置内联,则每个位置的块结构可能
不一样。 例如,现在可以在编译时计算条件
一些情况。 因为会显示内联函数的所有用途的覆盖范围
对于相同的源代码行,行数本身可能看起来不一致。

长时间运行的应用程序可以使用“_gcov_reset”和“_gcov_dump”工具来
将配置文件收集限制在感兴趣的程序区域。 调用“_gcov_reset(void)”
将所有配置文件计数器清零,调用“_gcov_dump(void)”将导致
在该点收集的配置文件信息被转储到 .gcda 输出文件。

使用 onworks.net 服务在线使用 mips64el-linux-gnuabi64-gcov-5


Ad


Ad

最新的 Linux 和 Windows 在线程序