亿唐网不做网站做品牌案例分析,东莞营销网站建设推广,网络运营商自动选择,wordpress主题模板文件前些天写的gcov相关的功能:https://mzhan017.blog.csdn.net/article/details/135140232;
最近和同事看一个问题,就是虽然将所需的选项–coverage加到了产品的编译环境里,但是还是没有生成所希望的文件。而且自己写小程序来验证这个选项,也是没问题,可以产生程序运行时的…前些天写的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 (__