Używam gcov.
Moja konfiguracja jest dość skomplikowane, że teraz mam myśleć o tym, opisując go:
Użyłem distro MinGW przez STL dostępne w nuwen.net dla gcc (g ++) i gcov. To daje mi pewien stopień przenośności.
Buduję aplikację testową za pomocą scons i pliku wsadowego, aby ją zbudować i uruchomić, aby sprawdzić, czy działa.
Następnie zatwierdzam kod do kontroli wersji i serwer CI Jenkins działający na mojej własnej maszynie odbiera go i nadal używa scons, kompiluje go, ale tym razem używając flagi --coverage
. Działa aplikacja testowa, która tym razem wyprowadza * .gc ?? akta. Następnie uruchamiam gcov raz, ale mówię mu, gdzie są wszystkie pliki, które produkują mnóstwo plików * .gcov. W przeszłości używałem skryptu pythonowego gcovr.py
, ale od tego czasu napisałem własne, aby zeskanować wszystkie pliki * .gcov i wydrukować wszystkie linie, które nie zostały pokryte.
Nie jestem pewien statusu open-source wszystkich tych elementów, ale wiem, że są one bezpłatne.
Uwaga: Jeśli używasz VS10, korzystania niektóre C++ 11 funkcje pod maską, np przenieś semantykę do standardowej biblioteki, chyba że zdefiniowałeś _HAS_CPP0X = 0 –
@Arne Mertz Tak, mam #define _HAS_CPP0X 0, dzięki! – Baz