Действительно ли возможно измерить функциональное покрытие с gcov?

Нашел решение этой проблемы после небольшой отладки.

Глядя на вывод терминала при переходе по ссылке, я заметил, что иногда он пытается отправить его через JS, за которым быстро следует HTML; другие, похоже, будут отправлены только через HTML.

Это указывало на расу между поведением по умолчанию и поведением в результате использования remote: true.

Решением было вызвать e.preventDefault() для обработчика щелчков элемента:

$('.my-element').click(function(e) { e.preventDefault(); })

Не идеально, и я предполагаю, что исправлено в более новых версиях Rails, хотя здесь есть небольшое закрытие:)

8
задан Norman Ramsey 7 January 2014 в 23:47
поделиться

3 ответа

Я предполагаю то, что Вы имеете в виду,-f опция, которая даст Вам процент строк, покрытых на функцию. Существует интересная статья о gcov в докторе Dobb, который мог бы быть услужливым. Если "человек gcov" не показывает флаг-f, проверьте, есть ли у Вас довольно последняя версия gcc комплекта.

Править: для получения процента функций, не выполняемых, можно просто проанализировать через функциональный вывод покрытия, поскольку покрытие на 0,00% должно быть в значительной степени эквивалентно не названный. Этот маленький сценарий печатает процент функций, не выполняемых:

#!/bin/bash

if test -z "$1"
then
    echo "First argument must be function coverage file"
else
    notExecuted=`cat $1 | grep "^0.00%" | wc -l`
    executed=`cat $1 | grep -v "^0.00%" | wc -l`

    percentage=$(echo "scale=2; $notExecuted / ($notExecuted + $executed) * 100" |bc)

    echo $percentage
fi
6
ответ дан 5 December 2019 в 10:05
поделиться

Мы начали использовать gcov и lcov вместе. Результаты lcov действительно включают процент функций, которые выполняются для "модуля", на который Вы смотрите.

Править: Модуль может пойти из каталогов вниз в файлы.

Я также хочу добавить, что, если Вы уже используете инструменты компилятора GNU, затем gcov/lcov не будет слишком трудным для Вас для получения выполнения и результатов это, продукты являются очень впечатляющими.

6
ответ дан 5 December 2019 в 10:05
поделиться

Утилита lcov хороша, и мы ее используем. Но я не уверен, нужен ли он вам для того, что вы хотите.

Мы

  1. используем ctags ( wikipedia ; sourceforge ), чтобы найти все функции, объявленные в соответствующих заголовочные файлы.

  2. Запустите GCOV, чтобы получить покрытие строки для каждой функции в двоичном файле.

  3. Сравните список функций из 1 и 2, чтобы получить «Функции, вызываемые» / «Доступные функции».

Мы называем это « Покрытие API », поскольку мы применяем шаг №1 только к общедоступным заголовкам API. Но вы можете сделать это для всех заголовков или только для части по вашему выбору. Я думаю, что соотношение, которое мы получаем таким образом, и есть то, которое вы ищете.

5
ответ дан 5 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: