수색…


비고

GCC는 여기 에 gcov의 일부 문서를 제공 합니다.

GcovrLcov 는 범위 결과를 생성하고 요약하는 데 사용할 수 있습니다.

소개

코드 커버리지는 각 소스 코드 문과 분기가 얼마나 자주 실행되는지를 나타내는 척도입니다. 이 측정은 대개 가능한 한 많은 코드가 테스트 스위트에서 테스트되도록 테스트 스위트를 실행할 때 필요합니다. 또한 코드 핫스팟을 결정하기 위해 프로파일 링하는 동안 사용할 수 있으므로 최적화 노력이 가장 큰 영향을 미칠 수 있습니다.

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 파일을 제거하지 않고 예제 프로그램을 다시 실행하면 소스의 각 행이 실행 된 횟수에 대한 계수가 이전 실행 결과에 추가됩니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow