1.. include:: ../disclaimer-zh_CN.rst
2
3:Original: Documentation/dev-tools/gcov.rst
4:Translator: ��������� Bernard Zhao <bernard@vivo.com>
5
6���Linux���������������gcov������������������������
7=====================================
8
9gcov���������������������Linux���������������GCC������������������������ gcov_ ���Linux������
10���������������������������������������gcov���������������������������gcov���debugfs���������������
11���������gcov��� ``-o`` ������������������������������������������������������������������������������
12���������������������������������������������������root���������::
13
14    # cd /tmp/linux-out
15    # gcov -o /sys/kernel/debug/gcov/tmp/linux-out/kernel spinlock.c
16
17���������������������������������������������������������������������������
18���������������������������������������������������������gcov��������������������� lcov_ ���������������
19���������������Linux������������������������������������������������������������HTML���������������
20
21���������������:
22
23* ���������������������������������������������������������������
24* ������������������������������������������������������������������������������������������
25* ���������������������������������������������������������������������������������������������������
26  ������������������������������
27
28.. _gcov: https://gcc.gnu.org/onlinedocs/gcc/Gcov.html
29.. _lcov: http://ltp.sourceforge.net/coverage/lcov.php
30
31
32������
33----
34
35������������������������::
36
37        CONFIG_DEBUG_FS=y
38        CONFIG_GCOV_KERNEL=y
39
40������������������������������������������������������::
41
42        CONFIG_GCOV_PROFILE_ALL=y
43
44���������������������������������������������������������������������������������������������������
45���������������������������������������
46������������������������������������������������������������������������������
47
48���������������������������������debugfs������������������������������::
49
50        mount -t debugfs none /sys/kernel/debug
51
52
53���������
54------
55
56������������������������������������������������������������������������������������������������������
57������Makefile������������������������:
58
59- ���������������������������������main.o���::
60
61    GCOV_PROFILE_main.o := y
62
63- ���������������������������::
64
65    GCOV_PROFILE := y
66
67���������������������������������������������������CONFIG_GCOV_PROFILE_ALL������������������
68���������������������������������������������������������::
69
70    GCOV_PROFILE_main.o := n
71
72���::
73
74    GCOV_PROFILE := n
75
76���������������������������������������������������������������������������
77
78
79������������
80--------
81
82gcov���������������debugfs���������������������:
83
84``/sys/kernel/debug/gcov``
85    gcov������������������������
86
87``/sys/kernel/debug/gcov/reset``
88    ������������������:������������������������������������������gcov���������������0
89
90``/sys/kernel/debug/gcov/path/to/compile/dir/file.gcda``
91    gcov������������������������������������������������������������������������������
92	  ������������������gcov���������������0
93
94``/sys/kernel/debug/gcov/path/to/compile/dir/file.gcno``
95    gcov������������������������������������������������������������������������������������������������
96    ���gcc������������������������������ ``-ftest-coverage`` ���������������
97
98
99���������������������
100--------------
101
102������������������������������������������������������������������������������������������������
103gcov������������������������������������������������������������������������������������������������������������
104������������������������������������debugfs���������������������
105������������������������������������������������������������������������������debugfs���������������������
106
107���������������������������gcov_persist������������������gcov������������������������::
108
109        gcov_persist = 0
110
111���������������������������������������������������������������������������gcov���������������������������
112���������������������
113
114
115���������������������������
116------------------
117
118gcov���������������������������������������������������������������������������������������������������
119������������������������������
120������������������������������������������������������������������������������������������������gcov������
121���������������������:
122
123.. _gcov-test_zh:
124
125a) ���gcov���������������������
126
127    ���������������gcov������������������������������������������������������gcc������������������
128    ���������������������������������������������������������:
129
130    ���������������:
131      - ���������C������������������
132
133    ������������������:
134      - ���������C������������������
135      - ���������.gcda���������.gcno������
136      - ���������������������
137
138    ������������������������������������������������������������������������������������������������
139    ���������������
140    ���������������������������������������������������������������������������make���������������
141    ������������CURDIR���������������
142
143.. _gcov-build_zh:
144
145b) ���gcov���������������������
146
147    ���������������������������������������������������������������������������������������:
148
149    ���sysfs������gcov���������:
150      - ���������.gcda������
151      - ���������.gcno���������������
152
153    ���������������������������������������������������������gcov������-o���������������������
154    ���������
155
156    ������������������������������������������::
157
158      /tmp/linux:    ������������������
159      /tmp/out:      ���������������������������make O=���������
160      /tmp/coverage: ������������������������������������������������
161
162      [user@build] cd /tmp/out
163      [user@build] gcov -o /tmp/coverage/tmp/out/init main.c
164
165
166������������������������������
167--------------------
168
169GCC���LLVM gcov������������������������
170������������������GCC��������� gcov_ ���������.gcno���.gcda������������������Clang������������
171��������� llvm-cov_ ���
172
173.. _gcov: https://gcc.gnu.org/onlinedocs/gcc/Gcov.html
174.. _llvm-cov: https://llvm.org/docs/CommandGuide/llvm-cov.html
175
176GCC���Clang gcov������������������������Kconfig������������
177kconfig������������������������������������������������������gcov���������
178
179������������
180--------
181
182���������������������1
183    ���������������������������������
184
185������������
186    ������������������������������������������������������������������������������������������������
187
188������������
189    ������������������Makefile��������� ``GCOV_PROFILE := n``
190    ������ ``GCOV_PROFILE_basename.o := n`` ������������������������������������
191
192���������������������2
193    ���sysfs���������������������������������������
194
195������������
196    ������seq_file���������������������������������������cp���tar���������������������������
197    sysfs���������������
198
199������������
200    ������ ``cat`` ������ ``.gcda`` ��������������� ``cp -d`` ���������������������������������B
201    ���������������������
202
203
204������A���collect_on_build.sh
205--------------------------
206
207������������������������������������������������������������
208������ :ref:`��������������������������� a. <gcov-test_zh>` ���
209
210.. code-block:: sh
211
212    #!/bin/bash
213
214    KSRC=$1
215    KOBJ=$2
216    DEST=$3
217
218    if [ -z "$KSRC" ] || [ -z "$KOBJ" ] || [ -z "$DEST" ]; then
219      echo "Usage: $0 <ksrc directory> <kobj directory> <output.tar.gz>" >&2
220      exit 1
221    fi
222
223    KSRC=$(cd $KSRC; printf "all:\n\t@echo \${CURDIR}\n" | make -f -)
224    KOBJ=$(cd $KOBJ; printf "all:\n\t@echo \${CURDIR}\n" | make -f -)
225
226    find $KSRC $KOBJ \( -name '*.gcno' -o -name '*.[ch]' -o -type l \) -a \
227                     -perm /u+r,g+r | tar cfz $DEST -P -T -
228
229    if [ $? -eq 0 ] ; then
230      echo "$DEST successfully created, copy to test system and unpack with:"
231      echo "  tar xfz $DEST -P"
232    else
233      echo "Could not create file $DEST"
234    fi
235
236
237������B���collect_on_test.sh
238-------------------------
239
240���������������������������������������������������������������
241������ :ref:`��������������������������� b. <gcov-build_zh>` ���
242
243.. code-block:: sh
244
245    #!/bin/bash -e
246
247    DEST=$1
248    GCDA=/sys/kernel/debug/gcov
249
250    if [ -z "$DEST" ] ; then
251      echo "Usage: $0 <output.tar.gz>" >&2
252      exit 1
253    fi
254
255    TEMPDIR=$(mktemp -d)
256    echo Collecting data..
257    find $GCDA -type d -exec mkdir -p $TEMPDIR/\{\} \;
258    find $GCDA -name '*.gcda' -exec sh -c 'cat < $0 > '$TEMPDIR'/$0' {} \;
259    find $GCDA -name '*.gcno' -exec sh -c 'cp -d $0 '$TEMPDIR'/$0' {} \;
260    tar czf $DEST -C $TEMPDIR sys
261    rm -rf $TEMPDIR
262
263    echo "$DEST successfully created, copy to build system and unpack with:"
264    echo "  tar xfz $DEST"
265