gcov가 클래스 메서드의 인라인 정의를 실행 가능 행으로보고하지 않는 것 같습니다. 예 : 나는 g++ -g -O0 -ftest-coverage -fprofile-arcs -o main main.cpp
으로 위의 프로그램을 컴파일하는 경우gcov가 클래스의 함수 정의를 실행 가능하지 않은 것으로보고하는 이유는 무엇입니까?
#include <iostream>
struct Foo {
void bar() {}
void baz() {}
};
int main() {
Foo foo;
foo.bar();
}
, 나는 다음과 같은 보고서를 얻을, 실행, 그 위에 gcov를 호출
-: 0:Source:main.cpp
-: 0:Graph:main.gcno
-: 0:Data:main.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <iostream>
-: 2:
-: 3:struct Foo {
1: 4: void bar() {}
-: 5: void baz() {}
-: 6:};
-: 7:
1: 8:int main() {
-: 9: Foo foo;
1: 10: foo.bar();
4: 11:}
왜 비 실행으로 라인 (5)보고를, 위의 방법이 올바르게 실행 된 것으로보고 되었더라도?
업데이트
는 gcov의 문서 (https://gcc.gnu.org/onlinedocs/gcc/Invoking-Gcov.html#Invoking-Gcov)에 따르면, -
실행하지만 아니었다 수 #####
및 ====
마르크 라인 동안 비 실행 선이다.
gcov는'bar()'가 실행되었고'baz()'가 실행되지 않았다는 것을 알려줍니다. 맞아요. 나는 당신의 질문을 오해합니까? –
@Drew Dorman 귀하의 의견을 해결하기 위해 질문을 업데이트했습니다. –
라인이 실행 가능합니까? 나는 결코 호출되지 않는 함수가 최종 바이너리에서 생략되었다고 상상한다. – hvd