📋️
clag カバレッジ
clang でカバレッジデータを採取する。
【参考】
テストプログラム
tcov.c
#include <stdio.h>
int add(int data1, int data2)
{
int result = 0;
result = data1 + data2;
return result;
}
int sub(int data1, int data2)
{
int result = 0;
result = data1 - data2;
return result;
}
int cul(int cul, int data1, int data2)
{
int result = 0;
if (cul == 1)
{
result = add(data1, data2);
}
else if (cul == 2)
{
result = sub(data1, data2);
}
return result;
}
int main()
{
int add = 0;
add = cul(1, 10, 8);
printf("10 + 8 = %d\n", add );
return 0;
}
コンパイル
コンパイル時にカバレッジデータを収集するように指定する。
-
-fcoverage-mapping
コードカバレッジ分析を可能にする。 -
-fprofile-instr-generate=tcov.profraw
指定ファイルにカバレッジデータを収集する。
「=tcov.profraw」を指定しなければ「default.profraw」に出力する。
~ $ cc -fcoverage-mapping -fprofile-instr-generate=tcov.profraw tcov.c -o tcov
この時点では実行ファイル「tcov」が生成されるだけである。
~ $ ls
tcov* tcov.c
実行
~ $ ./tcov
10 + 8 = 18
ファイルリストを確認。
~ $ ls
tcov* tcov.c tcov.profraw
この時、先に指定した「tcov.profraw」にカバレッジ結果が出力される。
カバレッジ結果
【参考】
llvm-profdata ツールでプロファイルデータを作成する。
~ $ llvm-profdata merge -sparse tcov.profraw -o tcov.profdata
~ $ ls
tcov* tcov.c tcov.profdata tcov.profraw
カバレッジ結果表示
【参考】
llvm-cov でカバレッジ結果を表示する。
~ $ llvm-cov show tcov -instr-profile=tcov.profdata
1| |#include <stdio.h>
2| |
3| |int add(int data1, int data2)
4| 1|{
5| 1| int result = 0;
6| 1| result = data1 + data2;
7| 1| return result;
8| 1|}
9| |
10| |int sub(int data1, int data2)
11| 0|{
12| 0| int result = 0;
13| 0| result = data1 - data2;
14| 0| return result;
15| 0|}
16| |
17| |int cul(int cul, int data1, int data2)
18| 1|{
19| 1| int result = 0;
20| 1| if (cul == 1)
21| 1| {
22| 1| result = add(data1, data2);
23| 1| }
24| |
25| 0| else if (cul == 2)
26| 0| {
27| 0| result = sub(data1, data2);
28| 0| }
29| |
30| 1| return result;
31| 1|}
32| |
33| |int main()
34| 1|{
35| 1| int add = 0;
36| 1| add = cul(1, 10, 8);
37| 1| printf("10 + 8 = %d\n", add );
38| 1| return 0;
39| 1|}
40| |
~ $
サマリー
~ $ llvm-cov report tcov -instr-profile=tcov.profdata --show-functions -sources tcov.c
File '/data/data/com.termux/files/home/c/cov/tcov.c':
Name Regions Miss Cover Lines Miss Cover Branches Miss Cover
-------------------------------------------------------------------------------------------------------
add 1 0 100.00% 5 0 100.00% 0 0 0.00%
sub 1 1 0.00% 5 5 0.00% 0 0 0.00%
cul 6 3 50.00% 12 4 66.67% 4 3 25.00%
main 1 0 100.00% 6 0 100.00% 0 0 0.00%
-------------------------------------------------------------------------------------------------------
TOTAL 9 4 55.56% 28 9 67.86% 4 3 25.00%
~ $
Discussion