gcovで使われないコードを見つけ出す
$ g++ -g -ftest-coverage -fprofile-arcs tmp.cpp -I/opt/local/include $ ./a.out $ gcov tmp.cpp File 'tmp.cpp' Lines executed:57.14% of 7 tmp.cpp:creating 'tmp.cpp.gcov'
できた。
-: 49:// comment -: 50:template<class T> -: 51:void foo(T& x){ -: 52: cout << x << endl; -: 53:}; -: 54: #####: 55:void foo(){ -: 56: if(0){ -: 57: cout << "foo" << endl; -: 58: } #####: 59: cout << "foo" << endl; -: 60:} -: 61: 1: 62:int main(){ -: 63: // hoge -: 64: if(0){ -: 65: cout << "main" << endl; -: 66: } 1: 67:} 1: 68:/*EOF*/
if(0)は最適化されて消え去っているのかな。あと閉じbraceにもカバレッジがつかない。インストラクションがないからか。使われてない関数を見つけるのは関数の頭に###がついているかどうかを見れば良さそうだけど、使われていないテンプレートとかはどうやって判断すればいいかな。
-: 50:template<class T> 1: 51:void bar(const T& x){ 1: 52: cout << x << endl; -: 53:}; 1: 62:int main(){ 1: 67: bar<int>(1);
使うとこうなる。templateは中に1がないときに使われていないと判断すればいいかな。