MWE的gcov和全局析構函數
#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;
}
問題
編譯上面的選項-fprofile-arcs -ftest-coverage
,銀行經營的程序,然後運行gcov的。程序輸出清楚地表明,按照該順序調用Foo :: Foo(),main()和Foo ::〜Foo()。 gcov輸出顯示Foo :: Foo()和main()被調用,但不是Foo ::〜Foo()。
根源
的全局對象由GNU內退出處理破壞(功能與at_exit註冊())。最終的gcov統計數據由另一個出口處理程序生成。 gcov退出處理程序明顯在全局銷燬退出處理程序之前調用,因此gcov不會看到被調用的析構函數。
錯誤狀態
這是一個古老的,老在gcov的錯誤。這裏是Bugzilla鏈接:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7970。這個錯誤在九年後依然存在,至少在i686-apple-darwin10-g ++ - 4.2.1中。
問題
這是gcov的一個不可避免的缺陷,這是我要住在一起,或只是事情發生貫穿性裂縫(九歲,完全忘了)溜?如果後者,如何解決它?
一些upvotes,一個downvote(沒有評論?),但沒有答案或評論到目前爲止。是否有任何堆棧溢出成員有辦法與gcc開發團隊溝通? – 2011-06-17 00:37:42