簡體   English   中英

多進程覆蓋率報告

[英]Multi-process coverage reports

我正在嘗試監視我的C ++項目的代碼覆蓋率。 如我在上一個問題中所述,我需要使用協程和其他高級C ++ 2a功能,因此我正在使用clang++進行編譯。 我在這里發現, 使用clang++編譯時(顯然,還有-O0-g ),可以使用-coverage標志。

與可執行文件一起,這將生成一個.gcno文件,其中包含可執行文件的映射。 運行可執行文件后,將生成一個附加的.gcda文件,其中包含實際的分析數據。

我注意到,如果我多次運行可執行文件,那么coverage輸出會很好地並正確地合並到.gcda文件中,這非常好。

現在,我想知道同時運行可執行文件的多個實例是否安全。

之前有人建議運行測試順序: 依次運行這些,但我的應用程序使用了大量的聯網,以及一些測試需要多個實例一起通信(我用的碼頭工人來模擬網絡,並netem拿到樣-現實的鏈接方案)。

將同一可執行文件的多個實例一起運行會不會引起任何問題? 我可以想象,如果實現了任何鎖定機制,覆蓋范圍數據將被安全且原子地寫入.gcda文件,並且如果其他可執行文件需要執行轉儲,它們將等待直到釋放鎖定為止。 但是,我在任何地方都找不到這種情況確實發生的保證。

自Clang 7起,GCOV分析應該是多進程安全的。

在Clang 6中,有兩個錯誤阻止了它的正常運行: https : //bugs.llvm.org/show_bug.cgi?id =34923https://bugs.llvm.org/show_bug.cgi?id=35464 ,但是它們現在已修復。

實際上,我們目前正在使用它來收集Firefox(多進程)的覆蓋率數據。 Firefox本身都有多個進程,我們還並行運行測試(針對某些特定的測試套件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM