gcovによるコードオーバーライド率検出
2396 ワード
一、GCOV紹介
Gcovツールの基本的な機能は、テスト時にコードが実行するオーバーライド率を表示することです.関数オーバーライド、文オーバーライド、ブランチオーバーライドなどのオーバーライド内容が含まれます.被測定プログラムの欠陥の解析に役立つ.このツールを使用して、プログラムのパフォーマンスを分析するために、ブランチでのプログラムの実行頻度を表示します.
二、GCOV使用
gcovはgccのリリースに伴う.gccコンパイルは
gcovは主に.gcnoと.gcdaの2つのファイルを使用します. gcnoは、基本ブロック図および対応するブロックのソースコードを再構築する行番号の情報を含む-ftest-coverageによって生成される. gcdaは、-fprofile-arcsコンパイルパラメータを加えたコンパイル後のファイル実行によって生成され、アークホッピングの回数やその他のサマリー情報(gcdaはプログラム実行が完了した後にのみ生成される)を含む. あまり話さないで、栗を挙げてください.手元にhello.cの例があります.ソースコードは以下の通りです.
以上から分かるように、gcov hello.cを実行するとともに、hello.c.gcovファイルが生成される.以下、gcovファイルを参照する.cat hello.c.gcov
出力は次のとおりです:-:0:Source:hello.c
Gcovツールの基本的な機能は、テスト時にコードが実行するオーバーライド率を表示することです.関数オーバーライド、文オーバーライド、ブランチオーバーライドなどのオーバーライド内容が含まれます.被測定プログラムの欠陥の解析に役立つ.このツールを使用して、プログラムのパフォーマンスを分析するために、ブランチでのプログラムの実行頻度を表示します.
二、GCOV使用
gcovはgccのリリースに伴う.gccコンパイルは
-fprofile-arcs -ftest-coverage
パラメータを加えてバイナリプログラムを生成し、テスト例を実行してコードオーバーライド率情報を生成する.fprofile-arcsパラメータはgccにプログラムのフローチャートを作成させ、その後、図に適した生成ツリーを見つけます.生成ツリーにないアークのみが操作されます(instrumented):gccは、これらのアークの実行回数をクリアするためにコードを追加します.このアークがブロックの唯一の出口または入口である場合、マニピュレータコード(instrumentation code)はブロックに追加されます.そうしないと、マニピュレータコードを含むベースブロックが作成されます.gcovは主に.gcnoと.gcdaの2つのファイルを使用します.
> #include
#include
void main()
{
int i = 1;
if(i == 1)
printf("helloworld!
");
else
printf("im not good!
");
}
:`gcc hello.c -fprofile-arcs -ftest-coverage -o hello`
:`./hello` :`helloworld!`
:gcov hello.c
:
File 'hello.c'
Lines executed:83.33% of 6
Creating 'hello.c.gcov'
以上から分かるように、gcov hello.cを実行するとともに、hello.c.gcovファイルが生成される.以下、gcovファイルを参照する.cat hello.c.gcov
出力は次のとおりです:-:0:Source:hello.c
1: 3:void main()
-: 4:{
1: 5: int i = 1;
1: 6: if(i == 1)
1: 7: printf("helloworld!
");
-: 8: else
#####: 9: printf("im not good!
");
1: 10:}