영어FrenchGermanItalianPortugueseRussianSpanish

온웍스 파비콘

mips-linux-gnu-gcov - 클라우드의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 제공업체에서 mips-linux-gnu-gcov 실행

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 mips-linux-gnu-gcov 명령입니다.

프로그램:

이름


gcov - 커버리지 테스트 도구

개요


gcov [-v|--번역] [-h|--도움]
[-a|--모든 블록]
[-b|--분기 확률]
[-c|--분기 수]
[-d|--디스플레이 진행]
[-f|--기능 요약]
[-i|--중간 형식]
[-l|--긴 파일 이름]
[-m|--demangled-이름]
[-n|--출력 없음]
[-o|--객체 디렉토리 디렉토리|파일]
[-p|--경로 보존]
[-r|--상대적으로만]
[-s|--소스 접두사 예배 규칙서]
[-u|--무조건 분기]
파일

기술


gcov 테스트 커버리지 프로그램입니다. GCC와 함께 사용하여 프로그램을 분석하여
보다 효율적이고 빠르게 실행되는 코드를 만들고 테스트되지 않은 부분을 발견하는 데 도움이 됩니다.
프로그램. 당신이 사용할 수있는 gcov 최적화 위치를 찾는 데 도움이 되는 프로파일링 도구
노력은 코드에 가장 큰 영향을 미칩니다. 당신은 또한 사용할 수 있습니다 gcov 다른 프로파일링과 함께
도구 gprof, 코드의 어느 부분이 컴퓨팅 시간을 가장 많이 사용하는지 평가합니다.

프로파일링 도구는 코드의 성능을 분석하는 데 도움이 됩니다. 다음과 같은 프로파일러를 사용하여 gcov
or gprof, 다음과 같은 몇 가지 기본 성능 통계를 찾을 수 있습니다.

* 각 코드 라인이 실행되는 빈도

* 실제로 실행되는 코드 라인

* 코드의 각 섹션이 사용하는 컴퓨팅 시간

코드가 컴파일될 때 작동하는 방식에 대해 이러한 사항을 알고 나면 각각을 볼 수 있습니다.
어떤 모듈을 최적화해야 하는지 확인하는 모듈입니다. gcov 일할 곳을 결정하는 데 도움이됩니다.
최적화에.

소프트웨어 개발자는 또한 테스트 스위트와 함께 커버리지 테스트를 사용하여 다음을 확인합니다.
소프트웨어는 실제로 출시하기에 충분합니다. 테스트 스위트는 프로그램이
예상대로 작동합니다. 보장 프로그램 테스트를 통해 얼마나 많은 프로그램이 실행되었는지 확인합니다.
테스트 스위트. 그런 다음 개발자는 추가해야 하는 테스트 케이스의 종류를 결정할 수 있습니다.
더 나은 테스트와 더 나은 최종 제품을 만들기 위한 테스트 스위트.

사용하려는 경우 최적화 없이 코드를 컴파일해야 합니다. gcov 때문에
몇 줄의 코드를 하나의 기능으로 결합하여 최적화를 수행하면
코드가 많은 부분을 사용하는 '핫스팟'을 찾는 데 필요한 정보
컴퓨터 시간. 마찬가지로, 때문에 gcov 라인별로 통계를 누적합니다(최저
resolution), 각각에 하나의 명령문만 배치하는 프로그래밍 스타일에서 가장 잘 작동합니다.
선. 루프나 다른 제어 구조로 확장되는 복잡한 매크로를 사용하는 경우
통계는 덜 유용합니다---매크로 호출이 있는 행에 대해서만 보고합니다.
나타납니다. 복잡한 매크로가 함수처럼 작동하는 경우 인라인으로 대체할 수 있습니다.
이 문제를 해결하는 기능.

gcov 라는 로그 파일을 생성합니다. 소스파일.gcov 각 라인의 횟수를 나타냅니다.
소스 파일 소스파일.c 실행했습니다. 이 로그 파일을 다음과 함께 사용할 수 있습니다. gprof
프로그램의 성능을 미세 조정하는 데 도움이 됩니다. gprof 타이밍 정보를 제공합니다
에서 얻은 정보와 함께 사용할 수 있습니다. gcov.

gcov GCC로 컴파일된 코드에서만 작동합니다. 다른 프로파일링과 호환되지 않습니다.
또는 테스트 커버리지 메커니즘.

옵션


-h
--도움
사용에 대한 도움말 표시 gcov (표준 출력에서) 아무 작업도 수행하지 않고 종료
추가 처리.

-v
--번역
gcov 버전 번호(표준 출력에서), 아무 작업도 수행하지 않고 종료
추가 처리.

-a
--모든 블록
모든 기본 블록에 대한 개별 실행 횟수를 씁니다. 일반적으로 gcov 출력
실행은 라인의 주요 블록에 대해서만 계산됩니다. 이 옵션을 사용하면
한 줄에 있는 블록이 실행되고 있지 않은지 확인합니다.

-b
--분기 확률
분기 주파수를 출력 파일에 쓰고 분기 요약 정보를
표준 출력. 이 옵션을 사용하면 프로그램의 각 분기가 얼마나 자주
찍은. 조건부 분기는 표시되지 않습니다. -u 옵션이 주어집니다.

-c
--분기 수
백분율이 아닌 취한 분기 수로 분기 빈도를 작성하십시오.
의 지점입니다.

-n
--출력 없음
생성하지 마십시오 gcov 결과물 파일.

-l
--긴 파일 이름
포함된 소스 파일에 대해 긴 파일 이름을 만듭니다. 예를 들어 헤더 파일이 엑스
코드를 포함하고 파일에 포함되었습니다. 교류, 실행 gcov 파일에 교류
라는 출력 파일을 생성합니다. ac##xhgcov 대신 xhgcov. 이것은 될 수있다
유용한 경우 엑스 여러 소스 파일에 포함되어 있으며 개별
기부금. 사용하는 경우 -p 옵션, 포함 및 포함된 파일 이름 모두
완전한 경로 이름이 됩니다.

-p
--경로 보존
생성된 이름의 전체 경로 정보를 유지합니다. .gcov 파일. 없이
이 옵션에서는 파일 이름 구성 요소만 사용됩니다. 이 옵션을 사용하면 모든 디렉토리
와 함께 사용됩니다 / 로 번역된 문자 # 문자, . 제거된 디렉토리 구성 요소
제거할 수 없는 .. 로 이름이 변경된 구성요소 ^. 소스 파일이 다음 위치에 있는 경우 유용합니다.
여러 다른 디렉토리.

-r
--상대적으로만
상대 경로 이름이 있는 소스 파일에 대한 정보만 출력합니다(source 뒤에
접두사 생략). 절대 경로는 일반적으로 시스템 헤더 파일이며 모든
인라인 함수는 일반적으로 흥미롭지 않습니다.

-f
--기능 요약
파일 수준 요약 외에 각 기능에 대한 출력 요약.

-o 디렉토리|파일
--객체 디렉토리 예배 규칙서
--객체 파일 파일
gcov 데이터 파일이 포함된 디렉터리 또는 개체 경로 이름을 지정합니다.
그리고, .gcno의 메이크업 시연, 그리고 한국에서 사랑을 담아 보낸 .gcda 이 옵션을 사용하여 데이터 파일을 검색합니다. 디렉토리인 경우
지정된 경우 데이터 파일은 해당 디렉토리에 있고 입력 파일 이름을 따서 명명됩니다.
확장 없이. 파일이 여기에 지정되면 데이터 파일의 이름은
확장자가 없는 해당 파일.

-s 예배 규칙서
--소스 접두사 예배 규칙서
출력 커버리지 파일을 생성할 때 제거할 소스 파일 이름의 접두사.
이 옵션은 별도의 디렉토리에 빌드할 때 유용하며,
출력 파일 이름을 결정할 때 소스 디렉토리는 필요하지 않습니다. 이
소스 파일이 절대 파일인지 여부를 결정하기 전에 접두사 감지가 적용됩니다.

-u
--무조건 분기
분기 확률이 주어지면 무조건 분기의 확률을 포함합니다.
무조건 분기는 일반적으로 흥미롭지 않습니다.

-d
--디스플레이 진행
표준 출력에 진행 상황을 표시합니다.

-i
--중간 형식
다음에서 사용할 수 있는 구문 분석하기 쉬운 중간 텍스트 형식으로 gcov 파일을 출력합니다. LCov
또는 다른 도구. 출력은 단일 .gcov 당 파일 .gcda 파일. 소스 코드가 없습니다.
이 필요합니다.

중간 형식 .gcov 파일은 한 줄에 하나의 항목이 있는 일반 텍스트입니다.

파일:
기능: , ,
카운트: ,
나뭇 가지: ,

어디 ~이다
notexec (분기가 실행되지 않음)
취함 (분기 실행 및 취함)
nottaken (분기는 실행되었지만 실행되지 않음)

여러 개 있을 수 있습니다 중간 gcov의 항목
파일. 다음의 모든 항목 해당 소스 파일과 관련된
다음까지 기입.

다음은 샘플입니다. -i 와 함께 사용됩니다 -b 옵션 :

파일:array.cc
기능:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE
기능:22,1,메인
카운트:11,1
카운트:12,1
카운트:14,1
분기:14, 촬영
카운트:26,1
지점:28, 기록되지 않음

-m
--demangled-이름
출력에 demangle 함수 이름을 표시합니다. 기본값은 망가진 기능을 표시하는 것입니다.
이름.

gcov 호출했을 때와 동일한 현재 디렉토리로 실행되어야 합니다.
컴파일러. 그렇지 않으면 소스 파일을 찾을 수 없습니다. gcov 파일을 생성
라는 망가진 이름.gcov 현재 디렉토리에서. 여기에는 적용 범위 정보가 포함됩니다.
그들이 대응하는 소스 파일의. 하나 .gcov 파일은 각 소스에 대해 생성됩니다(또는
헤더) 데이터 파일을 생성하기 위해 컴파일된 코드가 포함된 파일입니다. NS
망가진 이름 출력 파일 이름의 일부는 일반적으로 단순히 소스 파일 이름이지만
더 복잡한 경우 -l or -p 옵션이 주어집니다. 해당 옵션을 참조하십시오
자세한 내용은.

호출하면 gcov 여러 입력 파일이 있는 경우 각 입력 파일의 기여는
합산. 일반적으로 최종 링크와 동일한 파일 목록을 사용하여 호출합니다.
당신의 실행 파일.

그리고, .gcov 파일에는 : 프로그램 소스 코드와 함께 분리된 필드. 형식
is

: :

명령줄 옵션에서 요청하면 추가 블록 정보가 각 줄에 성공할 수 있습니다.
그리고, 실행 횟수 is - 코드가 포함되지 않은 라인의 경우. 실행되지 않은 행이 표시됩니다. #####
or ====, 예외가 아닌 경로로 도달할 수 있는지 여부에 따라
각각 C++ 예외 처리기와 같은 예외 경로.

시작 부분에 있는 정보의 일부 줄에는 line_number 제로. 이러한 서문 라인은
형태의

-:0: :

이러한 서문 줄의 순서와 수는 다음과 같이 증가합니다. gcov 개발
진행 --- 변경되지 않은 상태로 유지에 의존하지 마십시오. 사용하다 태그 특정 위치를 찾기 위해
프리앰블 라인.

추가 블록 정보는 다음 형식입니다.



그리고, 정보 사람이 읽을 수 있지만 기계 구문 분석에 충분히 간단하도록 설계되었습니다.
도.

백분율을 인쇄할 때 값이 다음과 같을 때만 0%와 100%가 인쇄됩니다. 정확하게 0 % 및
각각 100%. 일반적으로 0% 또는 100%로 반올림되는 다른 값은 다음과 같습니다.
대신 가장 가까운 비경계 값으로 인쇄됩니다.

사용시 gcov, 먼저 두 가지 특수 GCC 옵션을 사용하여 프로그램을 컴파일해야 합니다.
-fprofile-호 -최후 범위. 이것은 컴파일러에게 추가 생성을 지시합니다.
gcov(기본적으로 프로그램의 흐름 그래프)에 필요한 정보와 다음을 포함합니다.
필요한 추가 프로파일링 정보를 생성하기 위한 개체 파일의 추가 코드
gcov에 의해. 이러한 추가 파일은 개체 파일이 있는 디렉터리에 배치됩니다.
위치하고 있습니다.

프로그램을 실행하면 프로필 출력이 생성됩니다. 각 소스 파일에 대해
로 컴파일 -fprofile-호, 동반 .gcda 파일은 개체 파일에 배치됩니다
디렉토리.

달리는 gcov 프로그램의 소스 파일 이름을 인수로 사용하면 이제 목록이 생성됩니다.
각 라인에 대한 실행 빈도와 함께 코드의. 예를 들어 프로그램이
불렀다. tmp.c, 이것은 기본을 사용할 때 표시되는 gcov 시설:

$ gcc -fprofile-arcs -ftest-coverage tmp.c
$아웃
$ gcov tmp.c
파일 tmp.c에서 실행된 90.00개의 소스 라인 중 10%
tmp.c.gcov 생성

파일 tmp.c.gcov 의 출력을 포함합니다. gcov. 다음은 샘플입니다.

--: 0:출처:tmp.c
-: 0:그래프:tmp.gcno
--: 0:데이터:tmp.gcda
-: 0:런:1
-: 0:프로그램:1
-: 1:#포함
-: 2:
-: 3:int 메인(무효)
1:4:{
1:5: int i, 총계;
-: 6:
1: 7: 총계 = 0;
-: 8:
11:9: (i = 0, i < 10, i++)
10: 10: 총 += i;
-: 11:
1:12: if (총 != 45)
#####: 13: printf("실패\n");
-: 14: 그 외
1: 15: printf("성공\n");
1: 16: 0을 반환합니다.
--: 17:}

귀하가 -a 옵션을 선택하면 개별 블록 수를 얻을 수 있으며 출력은 다음과 같습니다.
이렇게 :

--: 0:출처:tmp.c
-: 0:그래프:tmp.gcno
--: 0:데이터:tmp.gcda
-: 0:런:1
-: 0:프로그램:1
-: 1:#포함
-: 2:
-: 3:int 메인(무효)
1:4:{
1: 4블록 0
1:5: int i, 총계;
-: 6:
1: 7: 총계 = 0;
-: 8:
11:9: (i = 0, i < 10, i++)
11: 9블록 0
10: 10: 총 += i;
10: 10블록 0
-: 11:
1:12: if (총 != 45)
1: 12블록 0
#####: 13: printf("실패\n");
$$$$$: 13블록 0
-: 14: 그 외
1: 15: printf("성공\n");
1: 15블록 0
1: 16: 0을 반환합니다.
1: 16블록 0
--: 17:}

이 모드에서 각 기본 블록은 블록의 마지막 줄인 한 줄에만 표시됩니다. NS
여러 줄 블록은 마지막 줄의 실행 횟수에만 기여하고 다른
이전 블록이 해당 라인에서 끝나지 않는 한 라인은 코드를 포함하는 것으로 표시되지 않습니다. NS
한 줄의 총 실행 횟수가 표시되고 다음 줄에는 실행 횟수가 표시됩니다.
해당 라인에서 끝나는 개별 블록의 경우. 각 블록 후 분기 및 호출 횟수
블록의 가 표시됩니다. -b 옵션이 주어집니다.

GCC 계측기가 호출하는 방식 때문에 호출 수가 없는 라인 뒤에 표시될 수 있습니다.
개별 블록. 보시다시피 13행에는 실행되지 않은 기본 블록이 포함되어 있습니다.

귀하가 -b 옵션을 선택하면 출력은 다음과 같습니다.

$ gcov -b tmp.c
파일 tmp.c에서 실행된 90.00개의 소스 라인 중 10%
tmp.c 파일에서 실행된 80.00개 분기 중 5%
tmp.c 파일에서 80.00개 분기 중 5%가 한 번 이상 가져옴
tmp.c 파일에서 실행된 50.00개의 호출 중 2%
tmp.c.gcov 생성

다음은 결과 샘플입니다. tmp.c.gcov 파일 :

--: 0:출처:tmp.c
-: 0:그래프:tmp.gcno
--: 0:데이터:tmp.gcda
-: 0:런:1
-: 0:프로그램:1
-: 1:#포함
-: 2:
-: 3:int 메인(무효)
함수 main이 1로 호출됨 1개 블록이 실행됨 75%
1:4:{
1:5: int i, 총계;
-: 6:
1: 7: 총계 = 0;
-: 8:
11:9: (i = 0, i < 10, i++)
분기 0이 91% 사용됨(폴스루)
분기 1은 9%를 차지했습니다.
10: 10: 총 += i;
-: 11:
1:12: if (총 != 45)
분기 0이 0% 사용됨(폴스루)
분기 1은 100%를 차지했습니다.
#####: 13: printf("실패\n");
호출 0은 실행되지 않음
-: 14: 그 외
1: 15: printf("성공\n");
0 호출 1 호출 100% 반환
1: 16: 0을 반환합니다.
--: 17:}

각 함수에 대해 함수가 호출된 횟수와 방법을 보여주는 줄이 인쇄됩니다.
여러 번 반환하고 함수 블록의 몇 퍼센트가 실행되었는지.

각 기본 블록에 대해 다음을 설명하는 기본 블록의 마지막 줄 다음에 한 줄이 인쇄됩니다.
기본 블록을 종료하는 분기 또는 호출. 여러 분기 및 호출이 있을 수 있습니다.
해당 라인에서 끝나는 여러 기본 블록이 있는 경우 단일 소스 라인에 대해 나열됩니다.
이 경우 지점과 통화에는 각각 번호가 부여됩니다. 간단한 방법은 없습니다
이러한 분기를 매핑하고 소스 구성으로 다시 호출합니다. 그러나 일반적으로 가장 낮은
번호가 매겨진 분기 또는 호출은 소스 행의 가장 왼쪽 구성에 해당합니다.

분기의 경우 한 번 이상 실행된 경우 횟수를 나타내는 백분율
분기를 가져온 횟수를 분기가 실행된 횟수로 나눈 값은
인쇄. 그렇지 않으면 "실행되지 않음"이라는 메시지가 인쇄됩니다.

호출의 경우 한 번 이상 실행된 경우 호출 횟수를 나타내는 백분율
반환된 호출 횟수를 호출이 실행된 횟수로 나눈 값은
인쇄. 이것은 일반적으로 100%이지만 "exit" 또는
"longjmp"이므로 호출될 때마다 반환되지 않을 수 있습니다.

실행 횟수는 누적됩니다. 하지 않고 예제 프로그램을 다시 실행하면
제거 .gcda 파일에서 소스의 각 행이 몇 번인지 카운트
실행은 이전 실행의 결과에 추가됩니다. 이것은 잠재적으로 유용합니다
여러 가지 방법으로. 예를 들어, 여러 데이터를 누적하는 데 사용할 수 있습니다.
프로그램은 테스트 검증 제품군의 일부로 실행되거나 보다 정확한 장기
많은 수의 프로그램 실행에 대한 정보.

의 데이터는 .gcda 파일은 프로그램이 종료되기 직전에 저장됩니다. 각각
컴파일된 소스 파일 -fprofile-호, 프로파일링 코드는 먼저 읽기를 시도합니다.
현존하는 .gcda 파일; 파일이 실행 파일과 일치하지 않는 경우(기본
블록 수) 파일의 내용을 무시합니다. 그런 다음 새 실행을 추가합니다.
계산하고 마지막으로 파일에 데이터를 씁니다.

사용 gcov + GCC 최적화

사용하려는 경우 gcov 코드를 최적화하려면 먼저 프로그램을 컴파일해야 합니다.
두 가지 특별한 GCC 옵션: -fprofile-호 -최후 범위. 그 외에도 할 수 있습니다
다른 GCC 옵션을 사용합니다. 하지만 프로그램의 모든 라인이
최적화와 동시에 컴파일하면 안 됩니다. 일부 기계에서
옵티마이저는 일부 간단한 코드 라인을 다른 라인과 결합하여 제거할 수 있습니다.
예를 들어 다음과 같은 코드:

만약 (a != b)
c = 1;
그렇지 않으면
c = 0;

일부 기계에서는 하나의 명령어로 컴파일될 수 있습니다. 이런 경우에는 방법이 없다.
gcov 별도의 실행 횟수가 없기 때문에 각 줄에 대해 별도의 실행 횟수를 계산합니다.
각 라인에 대한 코드. 따라서 gcov 프로그램을 컴파일하면 출력은 다음과 같습니다.
최적화:

100: 12:만약 (a != b)
100: 13: c = 1;
100: 14:기타
100: 15: c = 0;

출력은 최적화로 결합된 이 코드 블록이 100번 실행되었음을 보여줍니다.
어떤 의미에서 이 결과는 정확합니다.
이 네 줄 모두. 그러나 출력은 결과가 몇 번인지 나타내지 않습니다.
0이고 결과가 1인 횟수입니다.

인라인 가능 함수는 예기치 않은 줄 수를 생성할 수 있습니다. 행 수가 표시됩니다.
인라인 가능 함수의 소스 코드이지만 표시되는 내용은 함수가 있는 위치에 따라 다릅니다.
인라인되거나 전혀 인라인되지 않은 경우.

함수가 인라인되지 않은 경우 컴파일러는
기능을 필요로 하는 모든 개체 파일에서. 만약에 파일A.o파일비오 둘 다
특정 인라인 가능 함수의 라인 본문에는 둘 다 적용 범위도 포함됩니다.
해당 기능을 계산합니다. 언제 파일A.o파일비오 서로 연결되어 있으면 링커는
많은 시스템에서 해당 함수에 대한 모든 호출에 대해 회선 본문 중 하나를 선택합니다.
다른 하나를 제거하거나 무시합니다. 불행히도 커버리지 카운터는 제거되지 않습니다.
사용하지 않는 함수 본체에 대해. 따라서 계측할 때 해당 기능을 한 번만 제외하고는 모두 사용합니다.
XNUMX 카운트를 표시합니다.

함수가 여러 위치에 인라인된 경우 각 위치의 블록 구조는
동일하지 않습니다. 예를 들어, 조건은 이제 컴파일 타임에 계산할 수 있습니다.
일부 사례. 인라인 함수의 모든 사용 범위가 표시되기 때문에
동일한 소스 라인의 경우 라인 카운트 자체가 일관성이 없어 보일 수 있습니다.

장기 실행 애플리케이션은 "_gcov_reset" 및 "_gcov_dump" 기능을 사용하여
관심 프로그램 영역으로 프로필 수집을 제한합니다. "_gcov_reset(void)" 호출
모든 프로필 카운터를 XNUMX으로 지우고 "_gcov_dump(void)"를 호출하면
해당 시점에 수집된 프로필 정보가 덤프됩니다. .gcda 출력 파일.

onworks.net 서비스를 사용하여 mips-linux-gnu-gcov 온라인 사용


Ad


Ad

최신 Linux 및 Windows 온라인 프로그램