Gibt es eine Möglichkeit, zwei .gcda-Dateien zu einem zusammenzuführen?

9

Ich habe mehrere Komponententests für eine Anwendung, von denen jede in der Lage ist, .gcda-Dateien zu erzeugen. Ich möchte in der Lage sein, einheitliche .gcda-Dateien zu generieren, die die Abdeckung meiner Test-Suite als Ganzes darstellen. Es scheint keine einfache Möglichkeit zu sein, dies zu tun, aber ich könnte mich irren, und darum frage ich.

Mit gcov ist es möglich, zu fusionieren .gcda-Dateien? wurde zuvor gefragt und die Lösung bestand darin, in lcov.info-Dateien zu konvertieren und auf diese Weise zusammenzuführen. Wenn möglich, möchte ich, dass die Ausgabe der Zusammenführungsoperation immer noch eine einzige .gcda-Datei ist, so dass ich nicht gezwungen bin, lcov zu verwenden.

    
Kanak 28.06.2011, 22:01
quelle

2 Antworten

4

Es gibt Code, um .gcda Dateien zusammenzufassen, aber leider ist er in libgcov.a vergraben, das als Teil von gcc erstellt wird. Wenn Sie ein Programm mit Coverage beenden (oder in irgendeiner Weise __gcov_flush() aufrufen), erkennt es tatsächlich bereits vorhandene .gcda -Dateien, lädt sie, aggregiert ihre Daten mit den Daten des laufenden Programms und speichert sie wieder. Ich kenne kein Tool, das diese Funktionalität in der Befehlszeile bereitstellt. Selbst mit libgcov.a hast du wahrscheinlich keine nützlichen Hooks, um das zu tun, was du willst, und würdest die Quelle aus der gcc-core-Distribution nehmen und sie modifizieren müssen.

Was ich in der Vergangenheit getan habe, ist einfach alle Daten in annotierte Quelle ( .gcov ) zu extrahieren und auf dieser Ebene zu aggregieren. Das .gcda -Format kann viel mehr speichern als die Zeilenabdeckungsinformationen (z. B. Verzweigungszählungen), und die libgcov.a -Aggregation weiß, wie diese zu kombinieren sind (für einige ist es nicht so einfach wie die Summierung).

    
Ben Jackson 28.06.2011 22:18
quelle
1

Ich habe gerade ein Testprojekt erstellt, das, AFAIKT, zeigt, dass, wenn eine einzelne Testanwendung nacheinander mit verschiedenen Parametern ausgeführt wird, die gcda-Dateien zwischen Läufen aktualisiert werden und gcov einmal ausgeführt wird (ich verwende gcovr.py ) erzeugt Informationen zur Gesamtabdeckung.

    
quamrana 07.07.2011 12:48
quelle

Tags und Links