delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2004/07/31/14:45:40

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
From: "Andrew Wall" <wallguide-usenet AT yahoo DOT com>
Newsgroups: comp.os.msdos.djgpp
Subject: Trouble with gpp/gcov
Date: Sat, 31 Jul 2004 19:30:39 +0100
Lines: 80
Message-ID: <2n26qfFsa6knU1@uni-berlin.de>
X-Trace: news.uni-berlin.de zALmyVDhNUFmNozEb6HE9AsXjXsPy0s/70KdJ07XrpI7riaydp
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1437
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1441
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Hi,
I'm trying to use gcov to show the coverage my unit tests manage on my
software.
I'm using Windows XP and gpp/gcov 3.4.1
I can get make/gpp to compile and link and the executables run OK, but gcov
doesn't always report the correct coverage.

I find that destructors of static class instances are not counted, but are
executed.  Here's an example:
testctor.cpp:
#include <iostream>
using namespace std;
class Test {
public:
 Test(void){
 cout<< "In Test ctor" << endl;
 }
 ~Test(void){
 cout<< "In Test dtor" << endl;
 }
}T1;

int main(void){
 // Test T2;
cout<< "In main" << endl;
return 0;
}

Batch file to build, run and report coverage:
gpp -o testctor.exe testctor.cpp -fprofile-arcs -ftest-coverage -lgcov
testctor.exe
gcov testctor.cpp


The output of the run of testctor.exe:
In Test ctor
In main
In Test dtor

This means that the ctor is called before main and the dtor is called after
main exits.  So far, so good.
The output of gcov:
File `testctor.cpp'
Lines executed:72.73% of 11
testctor.cpp:creating `testctor.cpp.gcov'

selected parts of testctor.cpp.gcov:
function _ZN4TestD1Ev called 0 returned 0% blocks executed 0%
    #####:    9: ~Test(void){
    #####:   10: cout<< "In Test dtor" << endl;
        -:   11: }

function _Z41__static_initialization_and_destruction_0ii called 1 returned
100% blocks executed 76%
        2:   18:}
function _GLOBAL__I_T1 called 1 returned 100% blocks executed 100%
        2:   19:/*EOF*/
function _GLOBAL__D_T1 called 0 returned 0% blocks executed 0%
    #####:   20:/*EOF*/

It seems that 3 out of 11 lines did not execute.

Notice the commented out line in main:  // Test T2;
If I uncomment this line and rerun then gcov reports 100% line coverage, but
I'm sure some of the individual counts are wrong:
        4:    9: ~Test(void){
function _GLOBAL__D_T1 called 0 returned 0% blocks executed 0%
        1:   10: cout<< "In Test dtor" << endl;
        -:   11: }

What does the count of 4 mean on line 9.  The count of 1 on line 10 should
be 2.

Any ideas anyone?


-- 
Andrew Wall


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019