gcov 統計 inline 函數
(金慶的專欄)
gcov可以統計 inline 函數,可是實際使用中碰到統計次數總是為0的現象。
假設類A的頭文件為 A.h, 實現文件為 A.cpp.
A 有幾個 inline 成員函數定義在 A.h 中。
使用 gcov 統計 A 的代碼覆蓋率時,可能會發現 A.h 中的 inline 成員調用次數為空或0。
除了確實未調用的原因,可能是 gcov 統計的對象錯了。
"gcov A.cpp" 統計的是 A.cpp 中實現的函數代碼,如果 A.cpp 中未調用自身的 inline 函數,統計結果確實為0。
只有到這些 inline 的調用方 cpp 文件中去統計,才會有想要的結果。
例如,B.cpp 中調用了 A 的 inline 函數,"gcov B.cpp" 才會統計出這些 inline 代碼.
參考:
另外,CMake 構建的.o文件命名不是 A.o, 而是 A.cpp.o, 所以
gcov A.cpp
會報 A.gcno 不存在。
實際文件應該是 A.cpp.gcno.
把它復制為 A.gcno 就行了。
或者用
gcov A.cpp.gcda
不知為什么,可以直接用 gcda 文件作為輸入。
或者
gcov -o A.cpp.o A.cpp
這樣應該是標準的調用方式。
Powered by: C++博客 Copyright © 金慶