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