gcov не генерирует информацию о покрытии для заголовочных файлов

я используюgcov в первый раз, и у меня возникла проблема, которая похожа на ту, о которой сообщается в этомнить, Однако я не смог решить свою проблему, следуя комментариям в этой теме.

Я пытаюсь измерить охват конкретного теста вKMyMoney-4.6.4а именно «testConstructor» в тестовом файле «mymoneyaccounttest.cpp». В этом тестовом примере используется следующий метод, который находится в заголовочном файле «mymoneyaccount.h» и имеет исполняемый код:

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

Итак, я создаю программу и тесты, а затем выполняю: gcov mymoneyaccount.cpp

Из отображаемой информации о покрытии я получаю:

... Файл 'mymoneyaccount.cpp' Выполнено строк: 8,91% из 393 Создание 'mymoneyaccount.cpp.gcov'

Файл 'mymoneyaccount.h' Выполненные строки: 25,00% от 4 Создание 'mymoneyaccount.h.gcov' ...

Информация о покрытии в "mymoneyaccount.cpp.gcov" в порядке. Напротив, mymoneyaccount.h.gcov показывает:

    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:  };

Может быть, я ошибаюсь, но этот результат означает, что gcov не рассматривает "return m_institution;" как исполняемый код, в то время как он рассматривает "return m_accountList.count ()" как исполняемый код. Кроме того, он показывает «6» в строке объявления класса, поэтому этот файл содержит информацию о покрытии, но не то, что я ожидал.

Я должен сказать, что, возможно, проблема связана с именами файлов и каталогов:

1- Объектные файлы создаются в «CMakefiles / kmm_mymoney.dir», оканчивающемся на «.cpp.o», например, mymoneyaccount.cpp.o. Таким образом, файлы "gcno" и "gcda" создаются с именами "mymoneyaccount.cpp.gcno" и "mymoneyaccount.cpp.gcda" (конечно, в каталоге "CMakefiles / kmm_mymoney.dir").

2- Когда я выполняю: gcov -o CMakeFiles / kmm_mymoney.dir mymoneyaccount.cpp gcov выдает следующую ошибку:

mymoneyaccount.gcno: не удается открыть файл заметок

Поэтому я должен переименовать эти файлы: mv mymoneyaccount.cpp.gcno mymoneyaccount.gcno mv mymoneyaccount.cpp.gcda mymoneyaccount.gcda

Наконец, у меня есть еще один вопрос. Когда я выполняю gcov в файле, содержащем тестовые случаи, я имею в виду «gcov mymoneyaccounttest.cpp» вместо «gcov mymoneyaccount.cpp», я также получаю файл «mymoneyaccount.h.gcov», но информация о покрытии еще хуже :

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

В любом случае, вопрос заключается в следующем: я должен выполнить «gcov» в файле реализации «mymoneyaccount.cpp» или в тестовом файле «mymoneyaccounttest.cpp»?

Извините за длину. Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос