2011-06-28 17 views
9

Mam kilka testów jednostkowych dla aplikacji, z których każda jest w stanie generować pliki .gcda. Chciałbym móc generować zunifikowane pliki .gcda, które reprezentują zasięg mojego zestawu testów jako całości. Wydaje się, że nie ma na to łatwego sposobu, ale mogę się mylić i dlatego pytam.Czy istnieje sposób na połączenie dwóch plików .gcda w jeden?

With gcov, is it possible to merge to .gcda files? było wcześniej zadawane, a rozwiązaniem było przekonwertować pliki lcv .info i scalić w ten sposób. Jeśli to możliwe, chciałbym, aby wyjście operacji scalania było nadal pojedynczym plikiem .gcda, więc nie będę zmuszony używać lcov.

Odpowiedz

4

Istnieje kod do scalania plików .gcda, ale niestety jest pochowany w libgcov.a, który buduje się jako część gcc. Jeśli wyjdziesz (lub w jakikolwiek inny sposób wywołasz __gcov_flush()) program skompilowany z pokryciem, to faktycznie wykryje istniejące pliki .gcda, załaduje je, zagreguje dane z uruchomionymi danymi programu i zapisze je z powrotem. Nie znam żadnego narzędzia zapewniającego tę funkcjonalność w wierszu poleceń. Nawet z libgcov.a prawdopodobnie nie masz przydatnych haczyków do robienia tego, co chcesz, i musiałbyś wziąć źródło z dystrybucji gcc-core i zmodyfikować ją.

To, co zrobiłem w przeszłości, to po prostu wyodrębnić wszystkie dane do przypisanego źródła (.gcov) i zagregować na tym poziomie. Format .gcda jest w stanie przechowywać o wiele więcej niż informacje o zasięgu sieci (np. Liczba oddziałów), a agregacja libgcov.a wie, jak je łączyć (dla niektórych nie jest to tak proste jak sumowanie).

1

Właśnie utworzyłem projekt testowy, który pokazuje, AFAIKT, że gdy pojedyncza aplikacja testowa jest uruchamiana sukcesywnie z różnymi parametrami, to pliki GCDA są aktualizowane między uruchomieniami a uruchomionym GCOV raz (ja używam gcovr.py) generują informacje o zagregowanym pokryciu .

Powiązane problemy