gcovによるコードオーバーライド率検出


一、GCOV紹介
Gcovツールの基本的な機能は、テスト時にコードが実行するオーバーライド率を表示することです.関数オーバーライド、文オーバーライド、ブランチオーバーライドなどのオーバーライド内容が含まれます.被測定プログラムの欠陥の解析に役立つ.このツールを使用して、プログラムのパフォーマンスを分析するために、ブランチでのプログラムの実行頻度を表示します.
二、GCOV使用
gcovはgccのリリースに伴う.gccコンパイルは-fprofile-arcs -ftest-coverageパラメータを加えてバイナリプログラムを生成し、テスト例を実行してコードオーバーライド率情報を生成する.fprofile-arcsパラメータはgccにプログラムのフローチャートを作成させ、その後、図に適した生成ツリーを見つけます.生成ツリーにないアークのみが操作されます(instrumented):gccは、これらのアークの実行回数をクリアするためにコードを追加します.このアークがブロックの唯一の出口または入口である場合、マニピュレータコード(instrumentation code)はブロックに追加されます.そうしないと、マニピュレータコードを含むベースブロックが作成されます.
gcovは主に.gcnoと.gcdaの2つのファイルを使用します.
  • gcnoは、基本ブロック図および対応するブロックのソースコードを再構築する行番号の情報を含む-ftest-coverageによって生成される.
  • gcdaは、-fprofile-arcsコンパイルパラメータを加えたコンパイル後のファイル実行によって生成され、アークホッピングの回数やその他のサマリー情報(gcdaはプログラム実行が完了した後にのみ生成される)を含む.
  • あまり話さないで、栗を挙げてください.手元にhello.cの例があります.ソースコードは以下の通りです.
    
    > #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:}