2011-06-28 254 views
9

我有一個應用程序的幾個單元測試,其中每個都能夠生成.gcda文件。我希望能夠生成統一的.gcda文件,代表整個測試套件的覆蓋範圍。似乎沒有一個簡單的方法來做到這一點,但我可能是錯的,這就是爲什麼我問。有沒有辦法將兩個.gcda文件合併爲一個?

With gcov, is it possible to merge to .gcda files?之前被問及解決方案是轉換爲lcov .info文件並以這種方式合併。如果可能的話,我希望合併操作的輸出仍然是一個單一的.gcda文件,這樣我就不會被迫使用lcov。

回答

4

有代碼合併.gcda文件,但不幸的是它埋在libgcov.a作爲gcc的一部分構建。如果你退出(或以任何方式調用__gcov_flush())一個覆蓋範圍編譯的程序,它實際上會檢測到已有的.gcda文件,加載它們,將它們的數據與正在運行的程序數據聚合,然後將其保存。我不知道任何在命令行提供該功能的工具。即使使用libgcov.a,您可能也沒有任何有用的掛鉤來完成您想要的操作,並且必須從gcc-core發行版中獲取源代碼並對其進行修改。

我過去所做的只是將所有數據提取到註釋源(.gcov)並在該級別進行聚合。格式.gcda能夠存儲比線路覆蓋信息(例如分支計數)多得多的數據,並且聚合知道如何組合這些數據(對於某些數據並不像求和一樣簡單)。

1

我剛剛創建了一個測試項目,顯示AFAIKT,當單個測試應用程序連續運行不同的參數,然後gcda文件在運行之間更新並運行gcov一次(我使用gcovr.py)生成聚合覆蓋率信息。

相關問題