LINUX.ORG.RU

Прошло полгода... Я тоже задавался таким вопростом ещё до этого поста, но как-то не нашёл тогда LCOV (the LTP GCOV extension), который очень даже неплох. По сравнению с coveralls он работает только с одним билдом, но при желании можно это допилить.

Про деструкторы особо не понял, отображает попадания на код корректно (с оптимизацией ещё не пробовал, но для покрытия она и должна быть отключена), включая указания на ~Class() = default; и class Derived : private Parent. Вызовы глобальных конструкторов/деструкторов приписывает последней строке файлов, что несколько неудобно, может это стоит подправить.

Умеет покрытие строк, функций, ветвей исполнения (в новых версиях выключено по умолчанию). Последнее для C++ не очень, такое впечатление, что учитываются ветвления, добавленные компилятором (проверки на 0 перед обращением к vtable и подобное), что негативно сказывается на итоговой оценке покрытия и отображении результатов. Но, возможно, это настраивается где-то в GCC.

По сравнению с coveralls результаты просматривать удобнее, есть группировка по каталогам. Разве что подсветки синтаксиса тут нету.

GPL, Perl, Unix-way.

Вообще, LCOV должен быть более известен. Тут, например, его упоминали всего лишь 7 раз. Было думал, это что-то новое, так нет, 15 лет уже доступен, если не больше. В общем, может кто-то тоже о нём не слышал, а теперь узнает.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

В lcov - я тыкал. Оно, как и всё, что работает с gcov и не постобрабатывает его выхлоп - с плюсами работает не очень.

Возможно сам gcov как то можно настроить, но в итоге я такой настройки не нашёл.

В coveralls как то обошли эту проблемму (судя по тому, что оно таки юзает gcov для крестов, как то обрабатывают выхлоп). Как разобраться времени так и не нашлось, хотя код у клиента открытый.

pon4ik ★★★★★
() автор топика
Ответ на: комментарий от pon4ik

Вызовы глобальных конструкторов/деструкторов приписывает последней строке файлов, что несколько неудобно, может это стоит подправить.

Вот это, кстати, gcov и делает, а я на lcov подумал.

В coveralls как то обошли эту проблемму (судя по тому, что оно таки юзает gcov для крестов, как то обрабатывают выхлоп). Как разобраться времени так и не нашлось, хотя код у клиента открытый.

Это который cpp-coveralls? Вот тут как минимум случай с закрывающей скобкой видно, возможно, это и есть вся их обработка.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Да там интересней не костыль выяснить, а морду к их клиенту свою написать.

Протокол там судя по всему не плох, раз они для стольки языков наваяли.

pon4ik ★★★★★
() автор топика
Ответ на: комментарий от pon4ik

Не могу посмотреть документацию, они хотят регистрацию на zendesk.com для этого (sic!), но судя по коду, всё что передаётся так это массив пар «имя файла»->«столбец от gcov» плюс имя билда и подпись для данных. Естественно, это всё не зависит от языка. А утилиты, из которых они написали только одну и то для ruby, просто подгатавливают этот массив и передают. Сам сайт берёт файл у GitHub/BitBucket и раскрашивает, плюс разницу покрытия между запусками да общую статистику отображает.

Так что смотреть особо и не на что, кроме интерфейса и хранилища данных нет там ничего. Лично меня и результаты от lcov очень даже устраивают, только историю изменений бы добавить.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

У lcov нет протокола для фронта (или есть?), поэтому как локальная смотрелка она норм, но как бэкэнд - не очень.

Вообщем на работе у нас решили что как и всегда есть вещи поважнее покрытияотчёта (ну и, что бы не расстраиваться наверное), а в остальных случаях проще gh лично мне заюзать :)

pon4ik ★★★★★
() автор топика
Ответ на: комментарий от pon4ik

У lcov нет протокола для фронта (или есть?)

Вроде, нету.

поэтому как локальная смотрелка она норм, но как бэкэнд - не очень.

Это да, просто в моём понимании «offline аналог» и есть «локальная смотрелка». А тут что-то вроде локального сервера нужно, такой себе coveralls enterprise edition.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Та не. Просто то, что имеет возможность безпроблемно менять морды - оно и локально и на сервере катит.

А конкретно в lcov как в локальной смотрелке не нравиться именно косяк с деструкторами который всю малину портит.

Это как рендеры маркдауна локальные - есть конечно десктопные прожки, но т.к. основной юзекейс это в вебе смотреть доку, то лучше всего работают решения типа grip.

pon4ik ★★★★★
() автор топика
Ответ на: комментарий от pon4ik

Просто то, что имеет возможность безпроблемно менять морды - оно и локально и на сервере катит.

При желании написать что-то, что парсит info-файл и отдаёт результат потом динамически, вряд ли особо сложно для тех, кто таким занимается.

А конкретно в lcov как в локальной смотрелке не нравиться именно косяк с деструкторами который всю малину портит.

Вроде, решаемо:

 bin/geninfo | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bin/geninfo b/bin/geninfo
index 96e72fb..1a5bf95 100755
--- a/bin/geninfo
+++ b/bin/geninfo
@@ -1864,7 +1864,7 @@ sub read_gcov_file($)
                                 {
                                         # Extra data
                                 }
-                                elsif ($count eq "-")
+                                elsif ($code eq "}" || $count eq "-")
                                 {
                                         # Uninstrumented line
                                         push(@result, 0);

Если добавить опцию командной строки, то может примут в upstream, надо будет попробовать. Они как раз новую версию должны сделать.

Это как рендеры маркдауна локальные - есть конечно десктопные прожки, но т.к. основной юзекейс это в вебе смотреть доку, то лучше всего работают решения типа grip.

Ну lcov HTML и генерирует, но там только статика. А поднимать мини-сервер на чём-то вроде питона, только ради того, чтобы зайти через браузер и глянуть вывод и всё это локально... Как по мне это слишком, сгенерировать и посмотреть ещё более-менее.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Больно смелый фикс, может есть ещё какие то юзекейсы, когда минус на скобочке бывает?

Тут надо снять репорт с чего то большого плюсового и проверить, что прецедентов нет или они сильно статистически маловероятны.

Для этого ещё придётся написать таки код, который вычисляет а от деструктора ли эта скобочка.

pon4ik ★★★★★
() автор топика
Ответ на: комментарий от pon4ik

Это так как для coveralls делают. И проверка «или», т.е. если в строке только «}», то игнорировать счётчик. Для coveralls они ещё static/inline проверяют и игнорируют, но зачем я не понял. По нормальному это надо GCC учить не инструментировать код, который не видно пользователю, смысл этого всё равно сомнительный (где-то может и пригодится, но скорее реже чем чаще).

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Ну скорее всего ты прав по всем пунктам.

Надо записать сиё решение и когда припрёт либо патч таскать либо пропихнуть таки в апстрим :)

pon4ik ★★★★★
() автор топика
13 февраля 2017 г.

Больше года прошло. Я опять поискал аналог, но ничего не нашёл. И наваял нечто сам. Оно вообще cli, но довольно легко приделался web-ui. Может тебе тоже сгодится.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

Воу. Круто, спасибо, что не забыл.

Сразу бросился в глаза красиво свёрстанный ридми:) Всё-таки встречают по одёжке.

Я обязательно посмотрю, но не обещаю, что скоро (столько всего надо посмотреть...).

pon4ik ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.