Szukaj…


Uwagi

GCC udostępnia tutaj dokumentację gcov

Gcovr i Lcov mogą być używane do generowania i podsumowywania wyników pokrycia

Wprowadzenie

Pokrycie kodu jest miarą stosowaną do częstotliwości wykonywania każdej instrukcji kodu źródłowego i gałęzi. Środek ten jest zwykle wymagany podczas uruchamiania zestawu testów, aby zapewnić, że jak najwięcej kodu jest testowane przez zestaw testów. Można go również użyć podczas profilowania w celu ustalenia punktów krytycznych kodu, a zatem tam, gdzie optymalizacja może mieć największy wpływ.

W kodzie GCC zasięg zapewnia narzędzie gcov. gcov działa tylko z kodem skompilowanym z gcc z określonymi flagami. Istnieje bardzo niewiele innych kompilatorów, z którymi gcov w ogóle działa.

Kompilacja

Przed użyciem gcov kod źródłowy powinien zostać skompilowany z gcc przy użyciu dwóch flag, -fprofile-arcs i -ftest-coverage . Mówi to kompilatorowi, aby wygenerował informacje i kod dodatkowego pliku obiektowego wymagany przez gcov.

gcc -fprofile-arcs -ftest-coverage hello.c

Łączenie powinno również używać flagi -fprofile-arcs .

Generuj dane wyjściowe

Aby wygenerować informacje o zasięgu, należy uruchomić skompilowany program. Podczas tworzenia pokrycia kodu dla zestawu testowego ten etap wykonywania będzie zwykle wykonywany przez zestaw testów, aby pokrycie pokazywało, które części programu testy są wykonywane, a które nie.

$ a.out

Uruchomienie programu spowoduje .gcda pliku .gcda w tym samym katalogu, co plik obiektowy.

Następnie możesz wywołać gcov z nazwą pliku źródłowego programu jako argumentem, aby utworzyć listę kodu z częstotliwością wykonywania dla każdej linii.

$ gcov hello.c
File 'hello.c'
Lines executed:90.00% of 10
Creating 'hello.c.gcov'

Wynik jest zawarty w pliku .gcov . Oto próbka:

         -:    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:}

Tutaj możesz zobaczyć numery linii i źródła oraz liczbę wykonań każdej linii. Jeśli linia nie została wykonana, jest oznaczona ##### .

Liczby wykonania są kumulatywne. Jeśli przykładowy program zostałby wykonany ponownie bez usuwania pliku .gcda, liczba razy, ile razy każda linia w źródle została wykonana, zostałaby dodana do wyników poprzedniego uruchomienia.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow