Warum funktioniert gcov 0% Deckung auf einer Header-Datei Bericht für eine gut verwendete Klasse?

StackOverflow https://stackoverflow.com/questions/784379

Frage

Ich bin versucht, die Testabdeckung zum ersten Mal messen unter Verwendung von gcov . Nun, da ich an der anfänglichen Lernkurve bin, scheinen die Dinge gut zu laufen, bis auf einen kleinen Haken. Ich gehe davon aus, dass es läuft darauf hinaus, einen Mangel an Verständnis für meinen Teil nach unten, so dass ich hoffe, dass jemand vertraut mit gcov kann erklären, was los ist.

Das Problem ist, dass ich eine bestimmte Header-Datei zeigt 0% Abdeckung. Doch die nur , was in diesem Header ist eine Klassendeklaration für eine gut genutzte Klasse.

Darüber hinaus ist die Implementierungsdatei für die Klasse zeigt 100% Deckung, und ich kann auf 5 verschiedene Tests zeigen, wo ich für eine Tatsache, dass die Klasse erfolgreich instanziiert wird.

Warum gcov würde 0% Deckung auf der Klasse berichten, und wie kann ich das Problem beheben?

- bearbeiten -

Wie lacqui unten ausgeführt, wenn der Header keinen ausführbaren Code hat, soll es nicht in Deckung Berechnungen einbezogen werden. Und in der Tat, aus allen meinen Klassen, dass bestimmte Header-Datei ist die einzige, die Abdeckungsinformationen zu generieren für gcov versucht.

Ich habe einen line-by-line Vergleich mit den anderen Header getan, und der größte Unterschied, den ich fand, war, dass diese besonderen Header keinen expliziten Konstruktor oder Destruktor haben, während die andere tun. In einem Versuch, die Unterschiede zwischen den Dateien zu minimieren, habe ich eine explizite Ctor und dtor auf die Problemklasse. Dies führte jedoch keinen Unterschied machen.

War es hilfreich?

Lösung

Es sieht aus wie ich das Problem aussortiert haben. Wie ich erwartet hatte, es ist eher ein Mangel-of-Erfahrung Problem, als alles andere.

Wie sich herausstellt, gcov wurde nur eine Teilmenge der verfügbaren Tracefiles zu finden, und berichtete deshalb nur einen Teil der Gesamtergebnisse. Das Finden und das Hinzufügen des Restes der Tracefiles das Problem behoben.

Für alle, die neugierig sind, die problematische Header-Datei zeigt immer noch in der Ausgabe auf. In der Tat, tun alle anderen Header-Dateien zu, obwohl sie keinen ausführbaren Code enthalten. Doch sie alle zeigen 90 +% Deckung.

Andere Tipps

C ++ erstellt impliziten destructor, auch wenn Sie nicht eine explizit erstellt haben. Wenn Sie nicht zerstören Sie das Objekt, vor dem Programmende, das implizite destructor nie aufgerufen. gcov zeigen dies durch Markieren eines ‚0‘ Zähler auf der Linie der Klassendeklaration.

Ihre Header-Datei enthält nicht ausgeführten Code. Da nichts ausgeführt wird (es gibt keinen ausgeführten Code in einer Klassendeklaration), gibt es nichts zu messen, und nichts zu decken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top