#include <iostream>
struct Foo {
Foo() {
std::cout << "Constructing Foo " << this << std::endl;
}
~Foo() {
std::cout << "Destructing Foo " << this << std::endl;
}
};
Foo global_foo;
int main() {
std::cout << "Entering and exiting main()" << std::endl;
return 0;
}
sorun
opsiyon -fprofile-arcs -ftest-coverage
yukarıda derlemek programı runn ve sonra gcov çalıştırın. Program çıkışı, bu sırayla Foo :: Foo(), main() ve Foo :: ~ Foo() öğelerinin çağrıldığını açıkça gösterir. Gcov çıkışı Foo :: Foo() ve main() 'ın çağrıldığını, ancak Foo :: ~ Foo() olmadığını gösterir.
Temel neden
küresel nesneler bir GNU iç çıkış işleyici tarafından yok edilir (at_exit kayıtlı fonksiyonu()). Son gcov istatistikleri başka bir çıkış işleyicisi tarafından üretilir. Gcov çıkış işleyicisi, genel olarak imha çıkış işleyicisinden önce çağrılır, bu nedenle gcov, yıkıcıların çağrıldığını görmez.
Hata durumu
Bu gcov eski, eski hatasıdır. İşte Bugzilla linki: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7970. Hata hala dokuz yıl sonra, en azından i686-apple-darwin10-g ++ - 4.2.1 arasındadır.
soru
bu, ben yaşamak zorunda şey gcov bir çözümlenemeyen hata mi, yoksa (dokuz yaşında ve tamamen unutulmuş) sızabiliyor olması sadece bir şeydir? İkincisi ise, nasıl düzeltilir?
Bazı yükseltmeler, bir downvote (yorum yok?), Ancak şu ana kadar hiçbir yanıt veya yorum yok. Yığın taşma üyelerinden herhangi birinin gcc geliştirme ekibi ile iletişim kurmanın bir yolu var mı? –