web-dev-qa-db-ja.com

lcovコードカバレッジレポートから特定のディレクトリを削除するにはどうすればよいですか?

私はlcovとシェルスクリプトの使用にあまり強くないので、それは私にとって学習プロセスです。コードカバレッジレポートの作成の基本は理解していますが、特定のディレクトリを除外するコード行がわかりません。 Shell実行可能ファイルに、次のコードを記述しました。

    #!/bin/sh
    ROOT_DIR=$1
    DEST_DIR=$2
    TARGET_DIR=$3
    TARGET=$4

   #init lcov
   lcov -c -i -d $TARGET_DIR/.. -o $TARGET_DIR/cov_init.info

    #run unit test executable
    "$DEST_DIR/$TARGET"

     #capture coverage after running executable
     lcov -c -d $TARGET_DIR/.. -o $TARGET_DIR/cov_test.info

     #I added this in-generate delta of coverage
     lcov -a $TARGET_DIR/cov_init.info -a $TARGET_DIR/cov_test.info -o $TARGET_DIR/cov.info

  # I added this in- Excludes some third party code
                    lcov --remove $TARGET_DIR/cov.info '/opt/*' '/usr/*' '$ROOT_DIR/Common?ExternalLibraries/*'

  #I added this in-generate report
            genhtml $TARGET_DIR/cov.info --ignore-errors source --output-directory $DEST_DIR/CoverageReport/$TARGET
            xdg-open $DEST_DIR/CoverageReport/$TARGET/index.html &

実行可能ファイルを実行した後、カバレッジをキャプチャする前に、ディレクトリを除外する必要があると確信しています。

10

lcov には、指定されたファイルのカバレッジデータを無視するオプション--removeがあります。

--remove tracefile pattern

tracefileからデータを削除します。

tracefileから特定のファイルセットのカバレッジデータを削除する場合は、このスイッチを使用します。追加のコマンドラインパラメーターは、シェルのワイルドカードパターンとして解釈されます(シェルが最初に展開しないように、それに応じてエスケープする必要がある場合があることに注意してください)。これらのパターンの少なくとも1つに一致するtracefile内のすべてのファイルエントリが削除されます。

削除操作の結果は、stdoutまたは-oで指定されたtracefileに書き込まれます。

-z-c-a-e-r-l--diff、または--summaryのいずれか1つのみ一度に指定できます。

あなたは次のようなことをすることができます。以下のハイパーリンクからの引用

lcov --remove /tmp/libreoffice_total.info -o /tmp/libreoffice_filtered.info \
    '/usr/include/*' \
    '/usr/lib/*' \
    '/usr/local/src/libreoffice/*/UnpackedTarball/*' \
    '/usr/local/src/libreoffice/workdir/*' \
    '/usr/local/src/libreoffice/instdir/*' \
    '/usr/local/src/libreoffice/external/*' \

詳細については、 このページ を参照してください。

14
Inian