http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48463
--- Comment #2 from Christian Feist <lieutenantfeist at hotmail dot de> 2011-04-11 15:30:19 UTC --- Thank you for your reply. Using GCC 4.6 (and with it the newest version of GCOV), does generate a slightly different output, but it doesn't show any improvement in terms of function coverage. I'm still getting multiple destructors, which seem to differ from one another (though I don't see 'D1' here): function _ZN6ClassAD0Ev called 0 returned 0% blocks executed 0% function _ZN6ClassAD2Ev called 1 returned 100% blocks executed 80% 1: 9:ClassA::~ClassA() -: 10:{ 1: 11: std::cout << "Bey, ClassA!" << std::endl; call 0 returned 100% call 1 returned 100% 1: 12:} call 0 never executed call 1 never executed branch 2 taken 0% (fallthrough) branch 3 taken 100% call 4 never executed I'm not sure what all this stuff about branches is that I have going on here, but I don't have an in my destructor, so I assume it is code generated by GCC in the generated destructors that are showing up in the coverage. It might be useful to know that these exist in the background, but this info is confusing and useless when analyzing ones own code coverage. On a side note: These also show up when generating documents with lcov. My course of action was the same as before, also leaving the source files unaltered.