gpt4 book ai didi

c - GCC 的代码覆盖率选项如何工作?

转载 作者:太空狗 更新时间:2023-10-29 17:15:52 25 4
gpt4 key购买 nike

考虑以下命令:

gcc -fprofile-arcs -ftest-coverage main.c

它生成文件 main.gcda,gcov 将使用该文件生成覆盖率分析。那么main.gcda是如何生成的呢?仪器是如何完成的?我可以看到检测代码吗?

最佳答案

.gcda 不是由编译器生成的;它是在您执行程序时由您的程序生成的。

.gcno是编译时生成的文件,是'注释文件'。 gcc 为每个 CU(编译器单元)生成一个基本的 block 图注释文件(.gcno)。

So how does main.gcda is generated?

在运行时统计数据被收集并存储在内存中。一些退出回调已注册,并在程序终止时调用以将数据写入 .gcda 文件。这意味着如果您在程序中调用 abort() 而不是 exit(),则不会生成 .gcda 文件。

How the instrumentation is done? Can I see the instrumented code?

您需要检查 gcc 的实现以获取详细信息,但基本上检测是通过向程序插入指令来计算每条指令执行的次数来完成的。但实际上不必为每条指令保留一个计数器; GCC 使用某种算法生成程序流图并为该图找到一棵生成树。只需要检测一些特殊的弧,就可以从中生成所有代码分支的覆盖范围。您可以反汇编二进制文件以查看经过检测的代码。如果您想查看 gcc 源文件,这里有一些文件可以覆盖:

toplev.ccoverage.c配置文件.clibgcov.cgcov.cgcov-io.c

编辑:一些已知的 gcov 错误仅供引用:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49484

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28441

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44779

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7970

关于c - GCC 的代码覆盖率选项如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19582660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com