2013-08-28 28 views
0

我正在嘗試爲我的項目生成覆蓋率報告。 .gcno文件按照預期爲共享對象代碼文件生成,但是當我運行可執行文件(使用生成的共享對象)時,.so也與可執行文件位於同一位置,但共享對象的.gcda文件不會生成而可執行代碼的.gcda文件按預期生成。 方法有問題嗎? 請注意使用gcov與可執行文件使用的共享對象

+0

[gcov:從共享庫生成.gcda輸出的可能的副本](http://stackoverflow.com/questions/3712908/gcov-producing-gcda-output-from-shared-library) – mvp

+0

我有gcc 4.1工具鏈,是否支持4.1以上參考gcc 4.5共享的鏈接? – him

+0

你能否提供關於你編譯的地方以及你的可執行文件在哪裏運行的細節,即你是否在你構建的地方運行可執行文件? –

回答

0

它可能獲得共享libarary的覆蓋率。 我嘗試簡單的hello應用程序分析與gcov共享庫的概念,即時能夠獲得代碼覆蓋率。 讓拿兩個文件的hello.c和extlib.c

首先編譯extlib.c

#include <stdio.h> 

extern void print(const char* p, ...); 

void print(const char* p, ...) { 
    printf("%s World!\n", p); 

}

gcc -shared -fPIC extlib.c -o libext.so -ftest-coverage -fprofile-arcs

在這裏會得到extlib.gcno libextlib.so

下一步鏈接到主要你好程序 //hello.c extern void print(cons t char *,...);

int main() { 
    print("Hello"); 
} 

gcc hello.c -L./ -lextlib -o test -ftest-coverage -fprofile-arcs

這hello.gcno文件之後。 執行./test

執行後會得到使用gcov *.c可以檢查覆蓋extlib.gcda和hello.gcda

所以我的建議嘗試一些簡單的文件在你的項目中分別編譯它與gcov分析。

+0

謝謝,這有助於提供方式來糾正這個問題 – him

+0

是你的問題解決了?如果是的話,你可以投票 –