gcc
코드 적용 범위 : gcov
수색…
비고
소개
코드 커버리지는 각 소스 코드 문과 분기가 얼마나 자주 실행되는지를 나타내는 척도입니다. 이 측정은 대개 가능한 한 많은 코드가 테스트 스위트에서 테스트되도록 테스트 스위트를 실행할 때 필요합니다. 또한 코드 핫스팟을 결정하기 위해 프로파일 링하는 동안 사용할 수 있으므로 최적화 노력이 가장 큰 영향을 미칠 수 있습니다.
GCC 코드 범위는 gcov 유틸리티에 의해 제공됩니다. gcov는 특정 플래그가있는 gcc로 컴파일 된 코드에서만 작동합니다. gcov가 전혀 작동하지 않는 다른 컴파일러는 거의 없습니다.
편집
gcov를 사용하기 전에 소스 코드는 -fprofile-arcs 및 -ftest-coverage 의 두 플래그를 사용하여 gcc로 컴파일해야합니다. 이것은 gcov에 필요한 정보와 추가 객체 파일 코드를 생성하도록 컴파일러에 지시합니다.
gcc -fprofile-arcs -ftest-coverage hello.c
링크도 -fprofile-arcs 플래그를 사용해야합니다.
출력 생성
커버리지 정보를 생성하기 위해서는 컴파일 된 프로그램이 실행되어야한다. 테스트 슈트에 대한 코드 적용 범위를 생성 할 때이 실행 단계는 일반적으로 테스트 슈트에 의해 수행되므로 테스트에서 실행되는 프로그램의 부분과 실행하지 않는 부분이 표시됩니다.
$ a.out
프로그램을 실행하면 .gcda 파일이 오브젝트 파일과 동일한 디렉토리에 생성됩니다.
결과적으로 프로그램의 소스 파일 이름을 인수로 gcov를 호출하여 각 행의 실행 빈도와 함께 코드 목록을 생성 할 수 있습니다.
$ gcov hello.c
File 'hello.c'
Lines executed:90.00% of 10
Creating 'hello.c.gcov'
결과는 .gcov 파일에 .gcov 있습니다. 다음은 샘플입니다.
-: 0:Source:hello.c
-: 0:Graph:hello.gcno
-: 0:Data:hello.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:
-: 3:int main (void)
1: 4:{
1: 5: int i;
-: 6:
1: 7: i = 0;
-: 8:
-: 9:
1: 10: if (i != 0)
#####: 11: printf ("Goodbye!\n");
-: 12: else
1: 13: printf ("Hello\n");
1: 14: return 0;
-: 15:}
여기서 라인 번호와 소스 및 각 라인이 실행 된 횟수를 볼 수 있습니다. 행이 실행되지 않으면 ##### 로 표시됩니다.
실행 횟수는 누적됩니다. .gcda 파일을 제거하지 않고 예제 프로그램을 다시 실행하면 소스의 각 행이 실행 된 횟수에 대한 계수가 이전 실행 결과에 추가됩니다.