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»?
Извините за длину. Благодарю.