我已经完成了“Documentation / gcov.txt”所说的。
关于哑剧的基本知识:
$ uname -a
Linux turf.ivor 3.9.5 #1 SMP Fri Jun 14 00:51:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/redhat-release
Fedora release 18 (Spherical Cow)
$ zcat /proc/config.gz | egrep "GCOV_|DEBUG_FS"
CONFIG_GCOV_KERNEL=y
CONFIG_GCOV_PROFILE_ALL=y
CONFIG_DEBUG_FS=y
$ mount | grep debugfs
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
# ls -la /sys/kernel/debug/gcov/
total 0
drwxr-xr-x 2 root root 0 Jun 14 2013 .
drwx------ 17 root root 0 Jun 14 2013 ..
-rw------- 1 root root 0 Jun 14 2013 reset
我找到的只是重置文件(空文件)。
正如“文件”所说:
90 4. Files
91 ========
92
93 The gcov kernel support creates the following files in debugfs:
94
95 /sys/kernel/debug/gcov
96 Parent directory for all gcov-related files.
97
98 /sys/kernel/debug/gcov/reset
99 Global reset file: resets all coverage data to zero when
100 written to.
101
102 /sys/kernel/debug/gcov/path/to/compile/dir/file.gcda
103 The actual gcov data file as understood by the gcov
104 tool. Resets file coverage data to zero when written to.
105
106 /sys/kernel/debug/gcov/path/to/compile/dir/file.gcno
107 Symbolic link to a static data file required by the gcov
108 tool. This file is generated by gcc when compiling with
109 option -ftest-coverage.
我该怎么办?
gcov是否仍支持最新的linux版本?
任何建议,谢谢。
`
答案 0 :(得分:1)
问题可能是gcc。一些较新的版本不再生成.ctors视图,而是使用.init_array。您可以通过执行某个启用gcov的内核对象的objdump -dr -j .ctors来确认这一点。如果没有找到这样的部分,请尝试.init_array。
我正在努力解决这个问题,现在试图理解在init / main.c的do_ctors调用中用.init_array替换.ctors的神秘奥秘。它不像在vmlinux.lds.h
中交换节名称那么简单对不起,这还不是答案。
答案 1 :(得分:1)
答案 2 :(得分:0)
内核中未启用对GCOV的支持。 请参考以下URL,将2个补丁应用到您的内核,您将能够在目标
上看到gcov文件https://groups.google.com/forum/#!topic/linux.kernel/JsvylFnag-Y
答案 3 :(得分:0)
对于3.7或3.8以上的新内核版本,您必须是sudo用户才能获取您的gcda文件。
sudo su
现在转到目录/sys/kernel/debug/gcov/
你会看到构建的linux代码路径。
答案 4 :(得分:0)
我遇到了同样的问题,我认为gcc是curplit。当我的gcc版本低于4.7时,eveything似乎进展顺利。否则问题就像你一样出来了。
为什么?
greebo52的答案就是答案。
如何解决?
你可以在4.7下使用gcc或编译你自己的gcc 4.7。配置gcc 4.7时,添加--disable-initfini-array。 像这样:
./ configure --disable-initfini-array ...(其他选项)