프로젝트에 인라인으로 유지하기 위해 라이브러리를 약간 변경했습니다. 나는 테스트를 실시했고 모든 것이 여전히 통과되었지만 커버리지는 더 이상 100 %가 아닙니다. 나는 조사하고 그 코드가 단지보고되지 않았다는 것을 알았다. 하지만 gcov가 실행될 때 gcov가 라인에 대한 적용 범위를보고하지 않는 이유는 알 수 없습니다.예기치 않은 커버 결과를보고하는 Gcov
int32_t PreviouslyEncountered(uint32_t n)
{
uint32_t i;
/* Search thru all the numbers encoountered so far see if there is a match */
for(i = 0; i < xcount; i++)
{
if(n == collection[i])
{
return 1; /* This value has been seen before */
}
}
/* Add the number to encountered values if there is space */
if(xcount < NUMBERTRACKERMAX)
{
collection[xcount] = n;
xcount++;
}
else
{
return NUMBERTRACKERMAX ;
}
return 0;
}
이것은 테스트입니다 : :
이
코드입니다/* Fill with 10000 elements */
for(i = 0; i < NUMBERTRACKERMAX; i++)
{
assert(PreviouslyEncountered(i) == 0);
}
/* Test that all 10000 elements are present */
for(i = 0; i < NUMBERTRACKERMAX; i++)
{
assert(PreviouslyEncountered(i) == 1);
}
는 그리고 이것은 커버리지 결과입니다 :
-: 51:int32_t PreviouslyEncountered(uint32_t n)
function PreviouslyEncountered called 201 returned 100% blocks executed 90%
201: 52:{
201: 53: uint32_t i;
-: 54:
-: 55: /* Search thru all the numbers encoountered so far see if there is a match */
20101: 56: for(i = 0; i < xcount; i++)
-: 57: {
19900: 58: if(n == collection[i])
-: 59: {
#####: 60: return 1; /* This value has been seen before */
-: 61: }
-: 62: }
-: 63:
-: 64: /* Add the number to encountered values if there is space */
201: 65: if(xcount < NUMBERTRACKERMAX)
-: 66: {
200: 67: collection[xcount] = n;
200: 68: xcount++;
-: 69: }
-: 70: else
-: 71: {
1: 72: return NUMBERTRACKERMAX ;
-: 73: }
-: 74:
200: 75: return 0;
-: 76:
-: 77:}
이 return 1;
실행할 것입니다 전에 인쇄 추가. 그것은 적용 범위를 얻지 못할 것이지만 return 1
에는 이제 표지가 있습니다. 어떤 아이디어? man 페이지 이외에는 아무것도 찾을 수 없다.
편집 : 댓글에서 나는 모든 것을 공개하지 않았다는 것을 알 수 있습니다. 나는 그 문제에 대해 몇 가지 진전을 보였다. 다른 함수 중 일부는 다른 함수를 테스트 할 때 커버를 사라지게합니다. PreviouslyEncountered
에 대한 테스트 만 실행하면 해당 기능을 100 % 커버 할 수 있습니다. 다른 테스트를 실행하면이 값이 재설정됩니다.
gcov 및 gcc의 버전은 어떤 것이 있습니까? 그러나, 당신이 더 많거나 적게 최신으로 인 한, 중요한 요인이게 확률이 낮다. –
주석이 NUMBERTRACKERMAX가 10,000이라고 할 때 함수가 201 번 실행되는 이유는 무엇입니까? 테스트를 위해 100으로 변경 했습니까? 함수가 이상하게 호출되는 곳은 어디입니까? –
또한 함수를 100 번 호출하여 숫자를 추가 한 다음 100 번 반복하여 번호가 존재하는지 확인하는 이유는 무엇입니까? 200 번을 추가하는 이유는 무엇입니까? –