2017-12-24 9 views
2

필자는 lcov (v1.13, OS X에서 컴파일러로 clang 사용)를 사용하여 테스트 스위트에 대한 코드 적용 범위를 생성하려고하고 있는데, 내가 해결할 방법을 모르는 문제. 너무 비슷한 질문이 있지만이 해결책을 찾지 못했습니다. 어떤 이유로, 기능/부재 선언이 도달로 표시되어 있지만, 같은 종류 아래 예에서 실행되지 않는다 (이 헤더에 인라인 방식의 정의이다)lcov는 함수 선언을 도달 할 수 있지만 적용 할 수없는 라인으로 표시합니다.

이 쓸모 광고 따르면 메트릭 렌더링

enter image description here

, 그래서 각 선언을 LCOV_EXCL_LINE으로 표시하지 않고 문제를 해결할 수있는 방법이 있기를 바랍니다. 몸은 아니지만 예를 들면, 어떤 이상한 것은 정의는 소스 파일에서도 빨간색으로 표시되는 방법이다

-g -O0 -fno-inline -ftest-coverage -fprofile-arcs -fno-elide-constructors 

: 사용

컴파일러 플래그는 꽤 표준

// header.h 
class Foo { 
    void bar();  // ignored, marked as unreachable 
} 

// header.cpp 
void Foo::bar() { // marked as red (reachable/not executed) 
    do_something(); // marked as covered 
} 

중요한 점이 있다면 소스 파일은 CMake의 테스트 장치에 정적으로 연결된 정적 라이브러리의 일부입니다. 내 자신의 질문에 대답

답변

1

: (GCC와 함께 그들이 어디에 반면) LLVM에 실제로없는 반면

분명히, lcov -i (초기 캡처), 함수의 시작 라인을 계측하는 것으로 가정합니다. 이를 상세하게 설명하는 GitHub 업스트림 (linux-test-project/lcov#30)이 있습니다.

업스트림이 lcov에 고정 될 때까지 간단히 "workaround"을 게시했습니다.베이스 커버리지 파일에서 기능 시작 행을 제거하는 Python 스크립트입니다.이 파일은 적어도 임시적으로 "수정"해야합니다.

관련 문제