[英]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 =34923和https://bugs.llvm.org/show_bug.cgi?id=35464 ,但是它們現在已修復。
實際上,我們目前正在使用它來收集Firefox(多進程)的覆蓋率數據。 Firefox本身都有多個進程,我們還並行運行測試(針對某些特定的測試套件)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.