2016-09-07 88 views
0

我正在用C++編寫一些測試,並且我正在使用gcov(實際上lcov,但我認爲它在旁邊)來獲取有關覆蓋範圍的信息。在運行時禁用gcov覆蓋

有沒有辦法在運行時禁用信息記錄? E.G. :

bool myTest() { 
    ObjectToTest obj; 

    /* Enable gcov... */ 

    obj.FunctionToTest(); 

    /* ...Disable gcov */ 

    if(obj.GetStatus() != WHATEVER) 
     return false; 
    else 
     return true; 
} 

在這種情況下,我想對gcov顯示爲「覆蓋」只是FunctionToTest但留下ObjectToTest構造的getStatus和「發現」。

提前致謝!

+0

不,這不是真的有可能,因爲它是插入它時,在編譯生成的代碼生成的數據的指令編譯器。一旦儀表代碼在那裏,那麼就不可能禁用它。 –

回答

0

不,在gcov的情況下,我們沒有任何這樣的選項。

我已經在一些覆蓋工具中看到了這樣的選項,例如直接通過直接檢測源代碼工作的三葉草。

除了解決您的問題之外,還會將該部分代碼寫入不同的源文件,並通過將其包含在所需的源文件中進行調用。
我的建議是這樣,因爲當您稍後使用LCOV或GCOVR生成覆蓋率報告時,它們都會提供一個選項,通過將覆蓋率報告傳遞給特定的標誌來排除指定的文件。

LCOV:

-r tracefile pattern 
    --remove tracefile pattern 
      Remove data from tracefile. 

GCOVR:

-e EXCLUDE, --exclude=EXCLUDE 
        Exclude data files that match this regular expression