sh4-linux-gnu-gcov - Online w chmurze

To jest polecenie sh4-linux-gnu-gcov, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS

PROGRAM:

IMIĘ


gcov — narzędzie do testowania zasięgu

STRESZCZENIE


gcv [-v|--wersja] [-h|--help]
[-a|--wszystkie bloki]
[-b|--oddział-prawdopodobieństwa]
[-c|--liczy-oddziałów]
[-d|--postęp-wyświetlania]
[-f|--podsumowania funkcji]
[-i|--format-średniozaawansowany]
[-l|--długie nazwy-plików]
[-m|--demangled-names]
[-n|--brak wyjścia]
[-o|--katalog-obiektów katalog|plik]
[-p|--zachowaj-ścieżki]
[-r|--tylko względna]
[-s|--przedrostek-źródła katalog]
[-u|--oddziały-bezwarunkowe]
pliki

OPIS


gcv to program pokrycia testów. Użyj go w połączeniu z GCC, aby przeanalizować swoje programy, aby
pomóc w tworzeniu wydajniejszego, szybciej działającego kodu i odkryć nieprzetestowane części twojego
program. Możesz użyć gcv jako narzędzie do profilowania, które pomoże odkryć, gdzie Twoja optymalizacja
wysiłki najlepiej wpłyną na Twój kod. Możesz także użyć gcv wraz z pozostałym profilowaniem
Narzędzie, gprof, aby ocenić, które części kodu zużywają najwięcej czasu obliczeniowego.

Narzędzia do profilowania pomagają analizować wydajność kodu. Korzystanie z profilera, takiego jak gcv
or gprof, możesz znaleźć podstawowe statystyki wydajności, takie jak:

* jak często wykonywana jest każda linia kodu

* jakie linie kodu są faktycznie wykonywane

* ile czasu obliczeniowego zajmuje każda sekcja kodu

Gdy już wiesz, jak działa Twój kod podczas kompilacji, możesz spojrzeć na każdy z nich
moduł, aby zobaczyć, które moduły powinny zostać zoptymalizowane. gcv pomaga określić, gdzie pracować
na optymalizację.

Deweloperzy oprogramowania używają również testowania pokrycia w połączeniu z pakietami testowymi, aby się upewnić
oprogramowanie jest wystarczająco dobre do wydania. Testsuite mogą zweryfikować, czy program
działa zgodnie z oczekiwaniami; test programu pokrycia, aby zobaczyć, jaka część programu jest wykonywana przez
testsuite. Deweloperzy mogą następnie określić, jakie rodzaje przypadków testowych należy dodać do
zestawy testowe, aby stworzyć zarówno lepsze testy, jak i lepszy produkt końcowy.

Powinieneś skompilować kod bez optymalizacji, jeśli planujesz używać gcv ponieważ
optymalizacja, łącząc kilka linijek kodu w jedną funkcję, może nie dać tak dużo
informacje, ponieważ musisz szukać „gorących punktów”, w których kod wykorzystuje bardzo dużo
czas komputera. Podobnie, ponieważ gcv gromadzi statystyki według linii (przy najniższym
rozdzielczość), działa najlepiej ze stylem programowania, w którym na każdej umieszcza się tylko jedną instrukcję
linia. Jeśli używasz skomplikowanych makr, które rozwijają się do pętli lub innych struktur kontrolnych,
statystyki są mniej przydatne --- podają tylko w wierszu, w którym wywołano makro
wydaje. Jeśli twoje złożone makra zachowują się jak funkcje, możesz je zastąpić inline
funkcje do rozwiązania tego problemu.

gcv tworzy plik dziennika o nazwie plik_źródłowy.gcov co wskazuje, ile razy każda linia
plik źródłowy plik_źródłowy.c wykonał. Możesz używać tych plików dziennika wraz z gprof do
pomoc w dostrajaniu wydajności programów. gprof podaje informacje o czasie
możesz używać wraz z informacjami, które otrzymujesz gcv.

gcv działa tylko na kodzie skompilowanym za pomocą GCC. Nie jest kompatybilny z żadnym innym profilowaniem
lub mechanizm pokrycia testowego.

OPCJE


-h
--help
Wyświetl pomoc na temat używania gcv (na standardowym wyjściu) i wyjdź bez robienia czegokolwiek
dalsze przetwarzanie.

-v
--wersja
Wyświetl gcv numer wersji (na standardowym wyjściu) i wyjdź bez robienia czegokolwiek
dalsze przetwarzanie.

-a
--wszystkie bloki
Napisz indywidualne liczniki wykonania dla każdego podstawowego bloku. Normalnie wyjścia gcov
wykonanie liczy się tylko dla głównych bloków linii. Dzięki tej opcji możesz
określić, czy bloki w obrębie jednej linii nie są wykonywane.

-b
--oddział-prawdopodobieństwa
Zapisz częstotliwości gałęzi do pliku wyjściowego i zapisz informacje podsumowujące gałęzie do
standardowe wyjście. Ta opcja pozwala zobaczyć, jak często każdy oddział w Twoim programie
został zabrany. Gałęzie bezwarunkowe nie będą wyświetlane, chyba że -u podana jest opcja.

-c
--liczy-oddziałów
Zapisz częstości rozgałęzień jako liczbę pobranych rozgałęzień, a nie jako procent
pobranych gałęzi.

-n
--brak wyjścia
Nie twórz gcv plik wyjściowy.

-l
--długie nazwy-plików
Twórz długie nazwy plików dla dołączonych plików źródłowych. Na przykład, jeśli plik nagłówkowy xh
zawiera kod i został dołączony do pliku AC, potem biegnie gcv w pliku AC
wygeneruje plik wyjściowy o nazwie ac##xhgcov zamiast xhgcov. To może być
przydatne, jeśli xh jest zawarty w wielu plikach źródłowych i chcesz zobaczyć osobę
składki. Jeśli używasz -p opcja, zarówno zawierające, jak i dołączone nazwy plików
będą pełne nazwy ścieżek.

-p
--zachowaj-ścieżki
Zachowaj pełną informację o ścieżce w nazwach generowanych .gcov pliki. Z pominięciem
ta opcja, używany jest tylko składnik nazwy pliku. Dzięki tej opcji wszystkie katalogi
są używane, z / znaki przetłumaczone na # postacie, . komponenty katalogu usunięte
i nieusuwalne .. komponenty przemianowane na ^. Jest to przydatne, jeśli pliki źródłowe są w
kilka różnych katalogów.

-r
--tylko względna
Wyświetlaj tylko informacje o plikach źródłowych ze względną ścieżką (po źródle
elizja prefiksu). Ścieżki bezwzględne to zazwyczaj systemowe pliki nagłówkowe i pokrycie dowolnych
funkcje wbudowane są zwykle nieciekawe.

-f
--podsumowania funkcji
Wyprowadzanie podsumowań dla każdej funkcji oprócz podsumowania na poziomie pliku.

-o katalog|plik
--katalog-obiektów katalog
--plik-obiektu filet
Określ katalog zawierający pliki danych gcov lub nazwę ścieżki obiektu.
Kurs .gcnr, .gcda pliki danych są wyszukiwane przy użyciu tej opcji. Jeśli katalog to
określony, pliki danych znajdują się w tym katalogu i są nazwane po nazwie pliku wejściowego,
bez jego przedłużenia. Jeśli plik jest określony w tym miejscu, pliki danych są nazwane po
ten plik bez rozszerzenia.

-s katalog
--przedrostek-źródła katalog
Przedrostek nazw plików źródłowych do usunięcia podczas generowania wyjściowych plików pokrycia.
Ta opcja jest przydatna podczas budowania w osobnym katalogu, a ścieżka do
katalog źródłowy nie jest potrzebny podczas określania nazw plików wyjściowych. Zauważ, że to
wykrywanie prefiksu jest stosowane przed określeniem, czy plik źródłowy jest bezwzględny.

-u
--oddziały-bezwarunkowe
Gdy podane są prawdopodobieństwa gałęzi, uwzględnij prawdopodobieństwa gałęzi bezwarunkowych.
Gałęzie bezwarunkowe zwykle nie są interesujące.

-d
--postęp-wyświetlania
Wyświetl postęp na standardowym wyjściu.

-i
--format-średniozaawansowany
Wygeneruj plik gcov w łatwym do przeanalizowania pośrednim formacie tekstowym, który może być używany przez lcow
lub inne narzędzia. Wyjście jest pojedyncze .gcov plik per .gcda plik. Brak kodu źródłowego
wymagane.

Format półproduktu .gcov plik jest zwykłym tekstem z jednym wpisem w wierszu

plik:
funkcjonować: , ,
liczba: ,
Oddział: ,

Gdzie jest
notexec (Oddział nie wykonany)
zajęty (oddział stracony i zajęty)
nottaken (oddział stracony, ale nie zajęty)

Może być wiele wpisy w pośrednim gcov
plik. Wszystkie wpisy następujące po a odnoszą się do tego pliku źródłowego
do następnego wejście.

Oto próbka, kiedy -i jest używany w połączeniu z -b opcja:

plik:tablica.cc
funkcja:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE
funkcja:22,1,główna
liczba: 11,1
liczba: 12,1
liczba: 14,1
oddział: 14, zajęty
liczba: 26,1
oddział: 28, nie zajęty

-m
--demangled-names
Wyświetlaj rozeznane nazwy funkcji w danych wyjściowych. Domyślnie pokazuje zniekształconą funkcję
nazwy.

gcv powinien być uruchamiany z bieżącym katalogiem takim samym, jak przy wywołaniu
kompilator. W przeciwnym razie nie będzie w stanie zlokalizować plików źródłowych. gcv produkuje pliki
nazywa oszpeconanazwa.gcov w bieżącym katalogu. Zawierają one informacje o zasięgu
pliku źródłowego, któremu odpowiadają. Jeden .gcov plik jest tworzony dla każdego źródła (lub
header) plik zawierający kod, który został skompilowany w celu wytworzenia plików danych. ten
zniekształcona nazwa część nazwy pliku wyjściowego jest zwykle po prostu nazwą pliku źródłowego, ale może
być czymś bardziej skomplikowanym, jeśli -l or -p podane są opcje. Zapoznaj się z tymi opcjami
.

Jeśli przywołasz gcv w przypadku wielu plików wejściowych wkłady z każdego pliku wejściowego są
podsumowano. Zazwyczaj wywołujesz go z tą samą listą plików, co końcowy link do
twój plik wykonywalny.

Kurs .gcov pliki zawierają : oddzielone pola wraz z kodem źródłowym programu. Format
is

: :

Dodatkowe informacje o bloku mogą pojawić się w każdym wierszu, jeśli zażąda tego opcja wiersza poleceń.
Kurs liczba_wykonań is - dla wierszy nie zawierających kodu. Niewykonane linie są zaznaczone #####
or ====, w zależności od tego, czy można do nich dotrzeć nietypowymi ścieżkami, czy tylko
wyjątkowe ścieżki, takie jak obsługa wyjątków C++, odpowiednio.

Niektóre linijki informacji na początku mają numer linii zero. Te linie preambuły są
formy

-0: :

Kolejność i liczba tych wierszy preambuły zostanie zwiększona jako gcv rozwój
postępy --- nie polegaj na tym, że pozostaną niezmienione. Posługiwać się etykieta zlokalizować konkretny
wiersz preambuły.

Dodatkowe informacje o bloku mają postać



Kurs Informacja jest czytelny dla człowieka, ale zaprojektowany tak, aby był wystarczająco prosty do przetwarzania maszynowego
też.

Podczas drukowania wartości procentowych 0% i 100% są drukowane tylko wtedy, gdy wartości są dokładnie 0% i
100% odpowiednio. Inne wartości, które zwykle byłyby zaokrąglane do 0% lub 100%, to
zamiast tego drukowane jako najbliższa wartość niegraniczna.

Podczas używania gcv, musisz najpierw skompilować swój program z dwoma specjalnymi opcjami GCC:
-f-łuki-profilu -pokrycie-ftest. To mówi kompilatorowi, aby wygenerował dodatkowe
informacje potrzebne gcov (w zasadzie wykres przepływu programu), a także zawiera
dodatkowy kod w plikach obiektowych do generowania dodatkowych potrzebnych informacji profilowania
przez gcov. Te dodatkowe pliki są umieszczane w katalogu, w którym znajduje się plik obiektowy
usytuowany.

Uruchomienie programu spowoduje wygenerowanie danych wyjściowych profilu. Dla każdego pliku źródłowego
skompilowany z -f-łuki-profilu, towarzyszący .gcda plik zostanie umieszczony w pliku obiektowym
katalogiem.

Bieganie gcv z nazwami plików źródłowych twojego programu jako argumentami, wygeneruje teraz listing
kodu wraz z częstotliwością wykonywania dla każdej linii. Na przykład, jeśli Twój program
jest nazywany tmp.c, to właśnie widzisz, gdy używasz podstawowego gcv obiekt:

$ gcc -fprofile-arcs -ftest-coverage tmp.c
$ a. out
$ gcov tmp.c
90.00% z 10 wierszy źródłowych wykonanych w pliku tmp.c
Tworzę tmp.c.gcov.

Plik tmp.c.gcov zawiera dane wyjściowe z gcv. Oto przykład:

-: 0:Źródło:tmp.c
-: 0:Wykres:tmp.gcno
-: 0:Dane:tmp.gcda
-: 0: Działa:1
-: 0:Programy:1
-: 1:#zawiera
-: 2:
-: 3:int główny (unieważniony)
1: 4: {
1: 5: int i, suma;
-: 6:
1: 7: suma = 0;
-: 8:
11:9: dla (i = 0; i < 10; i++)
10:10: suma += i;
-: 11:
1: 12: jeśli (łącznie != 45)
#####: 13: printf ("Awaria\n");
-: 14: inaczej
1: 15: printf ("Sukces\n");
1: 16: powrót 0;
-: 17:}

Kiedy używasz -a opcja, otrzymasz indywidualne liczniki bloków, a wynik wygląda
lubię to:

-: 0:Źródło:tmp.c
-: 0:Wykres:tmp.gcno
-: 0:Dane:tmp.gcda
-: 0: Działa:1
-: 0:Programy:1
-: 1:#zawiera
-: 2:
-: 3:int główny (unieważniony)
1: 4: {
1: 4-blok 0
1: 5: int i, suma;
-: 6:
1: 7: suma = 0;
-: 8:
11:9: dla (i = 0; i < 10; i++)
11: 9-blok 0
10:10: suma += i;
10: 10-blok 0
-: 11:
1: 12: jeśli (łącznie != 45)
1: 12-blok 0
#####: 13: printf ("Awaria\n");
$$$$$: 13-blok 0
-: 14: inaczej
1: 15: printf ("Sukces\n");
1: 15-blok 0
1: 16: powrót 0;
1: 16-blok 0
-: 17:}

W tym trybie każdy podstawowy blok jest wyświetlany tylko w jednym wierszu – w ostatnim wierszu bloku. A
blok wielowierszowy przyczyni się tylko do licznika wykonania ostatniej linii i innych
wiersze nie będą pokazywane jako zawierające kod, chyba że poprzednie bloki kończą się na tych wierszach. ten
pokazywana jest całkowita liczba egzekucji linii, a kolejne linie pokazują liczbę egzekucji
dla poszczególnych bloków, które kończą się na tej linii. Po każdym bloku liczy się oddział i połączenie
bloku zostanie wyświetlony, jeśli -b podana jest opcja.

Ze względu na sposób, w jaki wywoływane są instrumenty GCC, licznik wywołań może być wyświetlany po linii bez
poszczególne bloki. Jak widać, wiersz 13 zawiera podstawowy blok, który nie został wykonany.

Kiedy używasz -b opcja, twój wynik wygląda tak:

$ gcov -b tmp.c
90.00% z 10 wierszy źródłowych wykonanych w pliku tmp.c
80.00% z 5 oddziałów wykonanych w pliku tmp.c
80.00% z 5 gałęzi pobranych przynajmniej raz w pliku tmp.c
50.00% z 2 wywołań wykonanych w pliku tmp.c
Tworzę tmp.c.gcov.

Oto próbka wyniku tmp.c.gcov file:

-: 0:Źródło:tmp.c
-: 0:Wykres:tmp.gcno
-: 0:Dane:tmp.gcda
-: 0: Działa:1
-: 0:Programy:1
-: 1:#zawiera
-: 2:
-: 3:int główny (unieważniony)
funkcja główna nazwana 1 zwróciła 1 bloki wykonane 75%
1: 4: {
1: 5: int i, suma;
-: 6:
1: 7: suma = 0;
-: 8:
11:9: dla (i = 0; i < 10; i++)
oddział 0 zajęty 91% (upadek)
oddział 1 zajęty 9%
10:10: suma += i;
-: 11:
1: 12: jeśli (łącznie != 45)
oddział 0 zajęty 0% (upadek)
oddział 1 zajęty 100%
#####: 13: printf ("Awaria\n");
wywołanie 0 nigdy nie wykonywane
-: 14: inaczej
1: 15: printf ("Sukces\n");
zadzwoń 0 zadzwoń 1 zwrócono 100%
1: 16: powrót 0;
-: 17:}

Dla każdej funkcji wypisywany jest wiersz pokazujący, ile razy funkcja jest wywoływana, jak
wielokrotnie zwraca i jaki procent bloków funkcji został wykonany.

Dla każdego bloku podstawowego drukowany jest wiersz po ostatnim wierszu bloku podstawowego opisującego:
gałąź lub wywołanie kończące blok podstawowy. Może być wiele oddziałów i połączeń
wymienione dla pojedynczego wiersza źródłowego, jeśli istnieje wiele podstawowych bloków, które kończą się na tym wierszu.
W takim przypadku gałęzie i połączenia otrzymują numer. Nie ma prostego sposobu, aby
mapować te gałęzie i zwracać się do konstrukcji źródłowych. Generalnie jednak najniższy
numerowana gałąź lub wywołanie będzie odpowiadać konstrukcji znajdującej się najbardziej po lewej stronie w wierszu źródłowym.

Dla oddziału, jeśli został wykonany przynajmniej raz, to procent określający liczbę
razy, gdy gałąź została podjęta podzielona przez liczbę wykonanych gałęzi, będzie
drukowane. W przeciwnym razie zostanie wydrukowany komunikat „nigdy nie wykonany”.

W przypadku połączenia, jeśli zostało wykonane przynajmniej raz, to procent wskazujący liczbę
razy liczba zwróconych połączeń podzielona przez liczbę wykonanych połączeń będzie
drukowane. Zwykle będzie to 100%, ale może być mniejsze w przypadku funkcji wywołujących „wyjście” lub
"longjmp", a zatem mogą nie zwracać za każdym razem, gdy są wywoływane.

Liczniki egzekucji kumulują się. Jeśli przykładowy program został wykonany ponownie bez
usunięcie .gcda pliku, liczba razy, ile razy każdy wiersz w źródle był
wykonane zostaną dodane do wyników poprzednich przebiegów. Jest to potencjalnie przydatne
na kilka sposobów. Na przykład może służyć do gromadzenia danych z wielu
program działa jako część pakietu do weryfikacji testów lub w celu zapewnienia dokładniejszej długoterminowej
informacje z dużej liczby uruchomień programu.

Dane w .gcda pliki są zapisywane bezpośrednio przed zamknięciem programu. Dla każdego
plik źródłowy skompilowany z -f-łuki-profilu, kod profilujący najpierw próbuje odczytać w
Przede wszystkim system został opracowany .gcda plik; jeśli plik nie pasuje do pliku wykonywalnego (inna liczba podstawowych
liczba bloków) zignoruje zawartość pliku. Następnie dodaje w nowej egzekucji
liczy i ostatecznie zapisuje dane do pliku.

Korzystanie z gcv w GCC Optymalizacja

Jeśli planujesz skorzystać gcv aby pomóc zoptymalizować kod, musisz najpierw skompilować swój program
z dwoma specjalnymi opcjami GCC: -f-łuki-profilu -pokrycie-ftest. Poza tym możesz
użyj innych opcji GCC; ale jeśli chcesz udowodnić, że każda linia w twoim programie?
został wykonany, nie należy jednocześnie kompilować z optymalizacją. Na niektórych maszynach
optymalizator może wyeliminować niektóre proste wiersze kodu, łącząc je z innymi wierszami.
Na przykład kod taki:

jeśli (a != b)
c = 1;
więcej
c = 0;

można skompilować w jedną instrukcję na niektórych maszynach. W tym przypadku nie ma mowy o
gcv aby obliczyć oddzielne liczby wykonań dla każdej linii, ponieważ nie ma oddzielnych
kod dla każdej linii. Stąd gcv wynik wygląda tak, jeśli skompilowałeś program
z optymalizacją:

100: 12:jeśli (a != b)
100:13:c = 1;
100: 14: inaczej
100:15:c = 0;

Dane wyjściowe pokazują, że ten blok kodu, w połączeniu z optymalizacją, został wykonany 100 razy.
W pewnym sensie ten wynik jest poprawny, ponieważ była tylko jedna instrukcja reprezentująca
wszystkie cztery z tych linii. Jednak dane wyjściowe nie wskazują, ile razy wynik
było 0 i ile razy wynik był 1.

Funkcje inlineable mogą powodować nieoczekiwaną liczbę wierszy. Liczby linii są pokazane dla
kod źródłowy funkcji inlineable, ale to, co jest wyświetlane, zależy od tego, gdzie jest funkcja
inlined lub jeśli w ogóle nie jest inlined.

Jeśli funkcja nie jest wbudowana, kompilator musi wyemitować kopię poza wierszem
funkcji w dowolnym pliku obiektowym, który tego potrzebuje. Gdyby plikA.o i plikB.o oba zawierają z
ciała linii o określonej nieliniowej funkcji, będą również zawierać pokrycie
liczy się dla tej funkcji. Kiedy plikA.o i plikB.o są ze sobą połączone, linker będzie,
w wielu systemach wybierz jedną z nieaktualnych treści dla wszystkich wywołań tej funkcji,
i usunąć lub zignorować drugą. Niestety nie usunie liczników zasięgu
dla niewykorzystanego ciała funkcyjnego. Stąd, gdy oprzyrządowane, wszystkie oprócz jednego użycia tej funkcji
pokaże zero zliczeń.

Jeśli funkcja jest wbudowana w kilku miejscach, struktura blokowa w każdej lokalizacji może:
nie być taki sam. Na przykład warunek może być teraz obliczany w czasie kompilacji w
w niektórych przypadkach. Ponieważ zostanie pokazany zasięg wszystkich zastosowań funkcji wbudowanej
dla tych samych wierszy źródłowych sama liczba wierszy może wydawać się niespójna.

Długo działające aplikacje mogą używać funkcji „_gcov_reset” i „_gcov_dump” do
ograniczyć zbieranie profili do interesującego regionu programu. Dzwonię do „_gcov_reset(void)”
wyczyści wszystkie liczniki profili do zera, a wywołanie „_gcov_dump(void)” spowoduje
informacje o profilu zebrane w tym momencie, które mają zostać zrzucone do .gcda pliki wyjściowe.

Użyj sh4-linux-gnu-gcov online, korzystając z usług onworks.net



Najnowsze programy online dla systemów Linux i Windows