gcov não está gerando informações de cobertura para arquivos de cabeçalho

estou a usargcov pela primeira vez e estou com um problema semelhante ao relatado nestefio. No entanto, não consegui resolver o meu problema seguindo os comentários desse segmento.

Estou tentando medir a cobertura de um caso de teste concreto emKMyMoney-4.6.4, ou seja, "testConstructor" no arquivo de teste "mymoneyaccounttest.cpp". Este caso de teste está usando o seguinte método, que está no arquivo de cabeçalho "mymoneyaccount.h" e possui código executável:

 const QString& institutionId(void) const {
    return m_institution;
  }

Então, eu construo o programa e os testes e, em seguida, executo: gcov mymoneyaccount.cpp

Entre as informações de cobertura exibidas, obtenho:

... Arquivo 'mymoneyaccount.cpp' Linhas executadas: 8,91% de 393 Criando 'mymoneyaccount.cpp.gcov'

Arquivo 'mymoneyaccount.h' Linhas executadas: 25,00% de 4 Criando 'mymoneyaccount.h.gcov' ...

As informações de cobertura em "mymoneyaccount.cpp.gcov" estão ok. Por outro lado, "mymoneyaccount.h.gcov" mostra:

    6:   81:class KMM_MYMONEY_EXPORT MyMoneyAccount : public MyMoneyObject, public MyMoneyKeyValueContainer
    ...
    -:  192:  const QString& institutionId(void) const {
    -:  193:    return m_institution;
    -:  194:  }
    ...
    -:  272:  int accountCount(void) const {
#####:  273:    return m_accountList.count();
    -:  274:  };

Talvez eu esteja errado, mas esse resultado significa que o gcov não está considerando "return m_institution;" como código executável, enquanto considera "retornar m_accountList.count ()" como código executável. Além disso, mostra "6" na linha da declaração de classe, portanto este arquivo tem informações de cobertura, mas não o que eu estava esperando.

Devo dizer que talvez o problema tenha a ver com os nomes dos arquivos e dos diretórios:

1- Os arquivos de objeto são criados em "CMakefiles / kmm_mymoney.dir", terminando com ".cpp.o", por exemplo, mymoneyaccount.cpp.o. Portanto, os arquivos "gcno" e "gcda" são criados com o nome "mymoneyaccount.cpp.gcno" e "mymoneyaccount.cpp.gcda" (é claro, no diretório "CMakefiles / kmm_mymoney.dir").

2- Quando executo: gcov -o CMakeFiles / kmm_mymoney.dir mymoneyaccount.cpp gcov fornece o seguinte erro:

mymoneyaccount.gcno: não é possível abrir o arquivo de anotações

Então, eu tenho que renomear esses arquivos: mv mymoneyaccount.cpp.gcno mymoneyaccount.gcno mv mymoneyaccount.cpp.gcda mymoneyaccount.gcda

Finalmente, tenho outra pergunta. Quando executo gcov no arquivo que contém os casos de teste, quero dizer "gcov mymoneyaccounttest.cpp" em vez de "gcov mymoneyaccount.cpp", também obtenho um arquivo "mymoneyaccount.h.gcov", mas as informações de cobertura são ainda piores :

#####:   81:class KMM_MYMONEY_EXPORT MyMoneyAccount : public MyMoneyObject, public MyMoneyKeyValueContainer

Enfim, a questão é: devo executar "gcov" no arquivo de implementação "mymoneyaccount.cpp" ou no arquivo de teste "mymoneyaccounttest.cpp"?

Desculpe pelo comprimento. Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion