2009-05-08 115 views
21

我最近開始使用lcov來可視化我的代碼覆蓋率。這是一個很棒的工具。有沒有辦法將lcov代碼覆蓋率報告集中到一個或兩個目錄?

我注意到的一件事是,它爲我正在使用的所有文件(包括那些我不感興趣的文件)生成代碼覆蓋率報告。例如,它會爲我提供代碼覆蓋率報告, mysql ++文件。

是否有一種簡單的方法來強制lcov只生成特定文件的覆蓋率報告?

我已經使用-k參數,像這樣嘗試:(意思就是我只希望覆蓋的文件爲「有」和「SRC」目錄)

 
/usr/bin/lcov -q -c -i -b . -d .obj -k src/ -k include/ -o app_base.info 

{run unit tests now} 

/usr/bin/lcov -q -c -b . -d .obj -k src/ -k include/ -o app_test.info 
/usr/bin/lcov -q -a app_base.info -a app_test.info -o app_total.info 
/usr/bin/genhtml -q -o lcov_output_directory app_total.info 

然而,這並未似乎沒有用。該報告仍然顯示我所有的無關文件。任何建議都非常感謝。謝謝!

回答

25

lcov支持命令行參數- 刪除以完成您所要求的操作。

+9

的'--extract'選項可能更有用。用一切生成跟蹤文件,然後將你關心的目錄解壓縮到第二個跟蹤文件中。 – Dan

+1

看看[這個頁面](http://qiaomuf.wordpress.com/2011/05/26/use-gcov-and-lcov-to-know-your-test-coverage/),它有一個非常有用的 - 刪除使用的例子。 –

2

一種可能的方法是用coverage標誌(-fprofile-arcs -ftest-coverage)來約束哪些文件被編譯。如果你不希望你的工程師make文件系統是選擇哪些文件與測試儀表建,下面的技巧可能會爲你工作:

  • 生成應用程序,而無需儀器。
  • 刪除您想要測量的來源的.o文件
  • 打開檢測和重建。只有被刪除的目標文件纔會被重建。
  • 運行在僅發射gcov的文物,這是盲目地由LCOV腳本所消耗的目標區域LCOV

這將導致。

27

我使用--no-external標誌和--directory排除不需要的文件。

的外部從所述人的定義:

外部源文件是未位於由--directory或--base-目錄指定的目錄中的一個文件。

所以我的命令是這樣的:

$ lcov --directory src -c -o report.info --no-external 
Capturing coverage data from src 
Found gcov version: 4.2.1 
Scanning src for .gcda files ... 
Found 4 data files in src 
Processing src/C####.gcda 
    ignoring data for external file /usr/include/c++/4.2.1/bits/allocator.h 
+0

這是'lcov' 1.10,不是? – jackyalcine

+0

沒錯,它是在1.10中加入的,請參閱:http://ltp.sourceforge.net/coverage/lcov/changes.php – peetasan

+0

是的,對Ubuntu用戶來說太糟糕了,它不在'raring'或'saucy'的版本庫中。我一直在使用'--extract'方法,但這會讓生活變得更容易。 – jackyalcine

相關問題