09.07
我可能很早之前就聽過 gcov[1] 這個工具,但是我沒有去了解或學習它能做些什麼。
今天從朋友的噗那裡又再看到這個工具,而且有了簡單的認識,發覺這真是個好東西,應該要來試試看,就拿現在正在寫的 Choqok Plurk plugin 來試試看吧。
要使用 gcov 其實很簡單,只要在編譯跟連結的時候加上
-fprofile-arcs -ftest-coverage
這兩個 flag 即可。
不過我們的 project 是使用 CMake 所以改法稍微有點不同,下面就是修改的 diff
ubuntu@ubuntu-Vostro-V131 ~/kde/src/choqok (git-svn)-[plurk] % git diff
diff --git a/microblogs/plurk/CMakeLists.txt b/microblogs/plurk/CMakeLists.txt
index 2950374..0fb6cfa 100644
--- a/microblogs/plurk/CMakeLists.txt
+++ b/microblogs/plurk/CMakeLists.txt
@@ -32,7 +32,8 @@ plurklistdialog_base.ui
kde4_add_plugin(choqok_plurk ${choqok_plurk_SRCS})
-target_link_libraries(choqok_plurk ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${QJSON_LIBRARY} ${QTOAUTH_LIBRARY} choqok plurkapihelper)
+add_definitions(-fprofile-arcs -ftest-coverage)
+target_link_libraries(choqok_plurk ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${QJSON_LIBRARY} ${QTOAUTH_LIBRARY} choqok plurkapihelper -fprofile-arcs)
# Install
改完之後重新編譯,我的環境是依照 KDE Build Environment[2] 建立的,所以我是這樣編譯並執行程式的
cs choqok && kdebuild && ~/kde/inst/master/bin/choqok
執行時記得每項功能都點一點,這樣才會產生較完整的資料。
最後,我改使用 lcov[3],而不是 gcov,來產生較漂亮的網頁報表。
ubuntu@ubuntu-Vostro-V131 ~/kde/src/choqok (git-svn)-[plurk] % lcov -d ../../build/choqok/microblogs/plurk/CMakeFiles/choqok_plurk.dir/ -capture -o choqok.info
Capturing coverage data from ../../build/choqok/microblogs/plurk/CMakeFiles/choqok_plurk.dir/
Found gcov version: 4.6.1
Scanning ../../build/choqok/microblogs/plurk/CMakeFiles/choqok_plurk.dir/ for .gcda files ...
Found 19 data files in ../../build/choqok/microblogs/plurk/CMakeFiles/choqok_plurk.dir/
Processing choqok_plurk.dir/plurkaccount.gcda
Processing choqok_plurk.dir/plurkapishowthread.gcda
... ...
Processing choqok_plurk.dir/plurkapisearchtimelinewidget.gcda
Processing choqok_plurk.dir/plurkapimicroblogwidget.gcda
Processing choqok_plurk.dir/choqok_plurk_automoc.gcda
Finished .info-file creation
ubuntu@ubuntu-Vostro-V131 ~/kde/src/choqok (git-svn)-[plurk] % genhtml -o results choqok.info
Reading data file choqok.info
Found 104 entries.
Found common filename prefix "/home/ubuntu/kde"
Writing .css and .png files.
Generating output.
Processing file build/choqok/libchoqok/choqokbehaviorsettings.h
Processing file build/choqok/libchoqok/choqokappearancesettings.h
... ...
Processing file /usr/include/qt4/QtGui/qcolor.h
Processing file /usr/include/qt4/QtXml/qdom.h
Writing directory view page.
Overall coverage rate:
lines......: 37.8% (1369 of 3619 lines)
functions..: 46.5% (546 of 1173 functions)
branches...: 27.7% (599 of 2164 branches)
ubuntu@ubuntu-Vostro-V131 ~/kde/src/choqok (git-svn)-[plurk] % konqueror results/index.html
最後附上其他有使用到的參考資料
http://www.yuanma.org/data/2006/0613/article_805.htm
http://xuwenzhang.org/blog/tag/gcov/
1. http://gcc.gnu.org/onlinedocs/gcc/Gcov.html
2. http://techbase.kde.org/Getting_Started/Build/Environment
3. http://ltp.sourceforge.net/coverage/lcov.php