функция gcov не выполняется, но строки

Я использовал gcov для проверки покрытия кода. Теперь я получаю странный результат, некоторые функции перечислены как невыполненные, но строки в функции перечислены как выполненные.

вывод lcov:

  13           0 :     f<double>& operator*=(f<double>& lhs, const double& rhs)
14             :     {
15           9 :         // Some code...
16           0 :         return lhs;
17             :     }

вывод gcov:

#####:   13:    f<double>& operator*=(f<double>& lhs, const double& rhs)
-:   14:    {
9:   15:        // Some code...
#####:   16:        return lhs;
-:   17:    }

Как функция может быть перечислена как НЕ выполненная, когда строка (и)? Возможно ли это артефакт оптимизации GCC?

РЕДАКТИРОВАТЬ 1:

Версия G ++ / gcov: 4.9.2

версия lcov: 1.11

РЕДАКТИРОВАТЬ 2:

Comping с -O2 дает странное поведение. Тем не менее, компиляция с -O1 изменяет #### в 9

0

Решение

Ты должен бежать gcov на неоптимизированный код. Это даст вам вывод, возможно, интерпретированный lcov, который будет гарантировать, что все строки запущены.

Затем вы можете скомпилировать с оптимизацией для версии выпуска.

1

Другие решения

Ноль просто означает, что gcov не было данных для строки кода. Это может произойти только потому, что у gcc нет удобного способа инструмент — измените вашу программу, чтобы добавить счетчики (как в записи в функцию). Например, если оптимизатор удаляет или объединяет похожие операторы в соседних функциях, подсчитывать нечего.

Согласно руководство:

Формат

 execution_count:line_number:source line text

Дополнительная информация о блоке может следовать за каждой строкой, когда запрашивается параметром командной строки. Execution_count является ‘-’ для строк, не содержащих код. Неисполненные строки отмечены ‘#####‘ или же ‘====’в зависимости от того, достижимы ли они не исключительными путями или только исключительными путями, такими как обработчики исключений C ++, соответственно.

Дальнейшее чтение:

1

По вопросам рекламы [email protected]