2013-02-01 31 views
3

我使用gcov爲項目中的多個文件設置了C/C++代碼覆蓋率。 可執行文件正在並行運行。這會導致一些共享的代碼並行運行。並行運行時使用gcov的代碼覆蓋

我越來越腐敗的.da文件或零大小的.da文件。這是平行運行的問題嗎?

因爲兩個或兩個以上的可執行實例正在嘗試寫入相同的.da文件,以便爲執行中的每個語句編寫覆蓋計數?

如果是這樣,是否有任何解決方法?使用

gcov的版本是1.5

+0

如何改變你用來運行覆蓋測試的腳本,以便每次運行(不管它們是否平行)使用不同的結果文件? –

+0

但是對於運行不同的測試用例,想獲得累計計數器值來查看覆蓋率分析。代碼的共享部分碰巧並行運行,導致同時訪問相同的.da文件。這可能會導致腐敗。任何幫助完成並行處理避免爭用? –

+0

那麼,gcov是開源的。大概你可以修改它來鎖定這些文件,儘管如此,如果它每次運行只打開一次文件,那麼我認爲它沒有多大幫助。還有其他的c/C++覆蓋工具將收集「獨立」運行的測試覆蓋率數據,並將這些單獨的數據集合到一個集合中,爲您提供統一的概述。 –

回答

2

嗯,看來你已經想通了問題的根源,並四處尋找工作。
我用gcov成功配置了幾個代碼覆蓋項目。
我想清楚了一些事情給你:

  • 我們得到.gcno文件每個編譯期間--coverage選項儀表的源文件。
  • 而在執行時,我們得到每個gcno文件的.gcda文件。

.gcno文件只是相關源代碼文件的流程圖結構。
.gcda文件是執行時生成的實際覆蓋率數據。

所以,在你的情況.gcda(以前是在早期版本.da)是具有衝突,當兩個或多個執行試圖同時寫入同一個.gcda文件。

最簡單的解決方法是連續運行測試。 (至少這就是我所做的)
你不必擔心丟失覆蓋率數據,因爲.gcda得到追加隨着每次執行和不覆蓋。記住這一點,你不必重新編譯,因爲它會改變.gcno文件和.gcda以前的文件將變得無用。

相關問題