Строка, о которой вы говорите, будет встроена в режиме релиза.Это означает, что сама строка никогда не будет подсчитана (хотя, откровенно говоря, приращение счетчика могло быть перемещено в место, где функция встроена ... но g ++ пока не делает этого.)
Для того, чтобыИсправьте проблему, добавив -g
в командную строку g ++, чтобы сохранить отладку.Вы, вероятно, также хотите убедиться, что вы определили -D_DEBUG
.На самом деле, документация обычно говорит вам использовать -g
.
Наконец, вы хотите избежать оптимизаций с -O0
.
С моей стороны, я хотел бы также использовать -fprofile-arcs
и-ftest-coverage
.
Как уже упоминалось в комментарии в другом ответе, использование -fno-elide-constructors
и -fno-default-inline
также может помочь с охватом «отсутствующих» конструкторов и встроенных функций.
В отношенииЕсли открывающая скобка помечена, g ++, скорее всего, создаст конструктор (возможно, конструктор копирования) и покажет его в строке объявления первого класса.Могут быть созданы и другие функции, специфичные для компилятора, и иногда просто невозможно поразить их без чрезвычайно сложных тестовых случаев ... Я сталкиваюсь с этой проблемой все время.
Как предложено hillatizer, вы можете использоватьlcov.Это дает вам HTML в качестве вывода с легко читаемыми таблицами, которые вы можете быстро просмотреть.У меня есть такой пример:
http://lcov.csspp.org/csspp-1.0.5/lib/index.html
Как мы видим, библиотека на 100% покрыта всеми тестами.Но почему-то файл assemblyr.cpp говорит, что одна функция не покрыта.Я понятия не имею, какая функция, хотя, поскольку 100% кода, который я написал, покрыта ... Так что я просто игнорирую такое.