sample code
// Sample code
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
srand(time(NULL));
int count = 0;
for(;;){
int random_number = rand() % 100;
if(random_number > 95)
break;
else if(random_number > 100)
continue;
else
count++;
}
printf("count : %d\n", count);
}
build & execute
gcc --coverage -o coverage coverage.c
./coverage
- --coverage 옵션으로 컴파일 하고, 실행하면 같은 경로에 .gcda, .gcno 파일이 생성된다.
- gcda: 커버리지 정보 및 실행 횟수가 포함(동일경로에 생성되지만 -fprofile-dir 옵션으로 경로 설정 가능)
- gcno: 기본 블록 그래프를 재구성하고 블록에 소스 라인 번호를 할당하는 정보가 포함.(동일경로에 생성)
analysis
gcov
gcov coverage.c
// 같은 경로에 coverage.c.gcov 파일 생성
cat coverage.c.gcov
/*
-: 0:Source:coverage.c
-: 0:Graph:coverage.gcno
-: 0:Data:coverage.gcda
-: 0:Runs:1
-: 1:#include <stdio.h>
-: 2:#include <stdlib.h>
-: 3:#include <time.h>
-: 4:
1: 5:int main(){
-: 6:
1: 7: srand(time(NULL));
-: 8:
1: 9: int count = 0;
-: 10:
28: 11: for(;;){
29: 12: int random_number = rand() % 100;
-: 13:
29: 14: if(random_number > 95)
1: 15: break;
28: 16: else if(random_number > 100)
#####: 17: continue;
-: 18: else
28: 19: count++;
-: 20: }
1: 21: printf("count : %d\n", count);
-: 22:
-: 23:}
*/
- 가장 왼쪽 숫자는 해당라인 실행횟수이며 #####은 미실행 라인
gcovr
- gcov 파일을 시각화 하여 파싱해주는 툴
gcovr --html-details -r . --html coverage.html
gcovr -r . --csv coverage.csv
gcovr -r . --json coverage.json
'리눅스' 카테고리의 다른 글
Transparent Huge Page (0) | 2024.03.20 |
---|---|
get realtime output of ssh remote command (0) | 2023.11.08 |
Core dump not generated (0) | 2023.06.13 |
Linux Signal List (0) | 2021.06.10 |
How to use ctags (0) | 2020.11.04 |