いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

gcovとlcovとgenhtmlを使ってC言語のプログラムのカバレッジを計測してHTMLレポート出力

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。あまり使ったことなかったので忘れないうちに手順をメモメモ。。。

gcovとlcovとgenhtmlを使って、C言語のプログラムのカバレッジを計測してレポート出力する手順です。

gcovは、gccに付属しているカバレッジ解析ツール。lcovとgenhtmlは追加でインストールが必要です。

サンプル

何かソースを用意。

#include <stdio.h>
#include <stdlib.h>

int is_even(int num) {
    return num % 2 == 0;
}

int main(int argc, char *argv[]) {
    int number;

    if (argc < 2) {
        fprintf(stderr, "Usage: %s <number>\n", argv[0]);
        return 1;
    }

    number = atoi(argv[1]);
    if (is_even(number)) {
        printf("%d is even\n", number);
    } else {
        printf("%d is odd\n", number);
    }

    return 0;
}

コンパイルする際に -fprofile-arcs-ftest-coverage オプションを付与。

$ gcc -fprofile-arcs -ftest-coverage -o app app.c

アプリを実行します。別にここは1回とかではなくて何度も動作させる方が良い。

$ ./app 5

次に lcov と genhtml をインストール。genhtmlはlcovをインストールしたら付いてきます。

$ sudo apt install lcov

で、レポート生成

$ lcov --capture --directory . --output-file cov.info
$ genhtml cov.info --output-directory out

こんな感じにファイルが生成されていきます。

上のコマンドによって、outディレクトリにHTMLで結果が出力されています。

こんな感じで出力してくれます。

参考情報


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。