Linux: dev: gcc: --coverage 迷惑行为最终生成不了gcda文件?

发布时间:2023年12月29日

前些天写的gcov相关的功能:https://mzhan017.blog.csdn.net/article/details/135140232;

最近和同事看一个问题,就是虽然将所需的选项–coverage加到了产品的编译环境里,但是还是没有生成所希望的文件。而且自己写小程序来验证这个选项,也是没问题,可以产生程序运行时的代码覆盖率统计文件。如下:

[-rwxr-xr-x. 1 root root 33K Dec 23 12:35 a.out
-rw-r–r–. 1 root root 256 Dec 23 12:35 else.gcda //the file
?
root@10 test]# gcov else
File ‘else.c’
Lines executed:75.00% of 8
Creating ‘else.c.gcov’

那问题出现到了哪里呢?后来同事经过查看一个链接脚本的更改记录,发现是链接脚本里的改动影响了这个行为。

那接下来就是要看到底是什么样的改动影响了这个行为。最终一步一步的发现是因为,在链接init_array/fini_array段的时候,默认链接脚本是使用如下的脚本,做链接:

.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP ((SORT_BY_INIT_PRIORITY(.init_array.) SORT_BY_INIT_PRIORITY(.ctors.)))
KEEP (
(.init_array EXCLUDE_FILE (crtbegin.o crtbegin?.o crtend.o crtend?.o ) .ctors))
PROVIDE_HIDDEN (__

文章来源:https://blog.csdn.net/qq_36428903/article/details/135289203
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。