Я использую буст-тест для юнит-тестирования, а gcov и lcov — для измерения покрытия.
Неудобно, что genhtml генерирует подобные отчеты для покрытия функций:
Теперь я хочу знать, что функция _ZN7UtilLib11ProgressBarC2EjdRSo
на самом деле
Пока что я не могу соотнести эту функцию с любым интерфейсом класса ProgressBar:
class ProgressBar {
public:
explicit ProgressBar(
unsigned int expected_count,
double updateInterval = 30,
std::ostream& os = std::cout);
unsigned int operator+=(unsigned int increment);
unsigned int operator++();
unsigned int operator++(int i);
}
Может ли кто-нибудь помочь мне, как получить лучшие имена функций с помощью gcov или как понять эти имена функций.
Приложение скомпилировано с gcc4.7 со следующими флагами:-g -g -save-temps=obj -Wall -Wextra -Wno-unused-parameter -Wno-error=unused-parameter -O0 -pedantic
Это искаженные символы C ++, используйте c++filt
в оболочке, чтобы разобраться с этим:
> c++filt _ZN7UtilLib11ProgressBarC2EjdRSo
UtilLib::ProgressBar::ProgressBar(unsigned int, double, std::basic_ostream<char, std::char_traits<char> >&)
Кроме того, так как вы, кажется, используете genhtml
, проверить --demangle-cpp
Возможность сделать разборку автоматически для вас.
Обратите внимание, что компилятор выдает две реализации для написанного вами ctor, используя --demangle-cpp
будет скрывать разницу, которая видна только в искаженном имени символа. Чтобы понять, что делает компилятор, взгляните Вот.
использование c++filt
, как это:
$c++filt -n _ZN7UtilLib11ProgressBarC2EjdRSo
какие выводы:
UtilLib::ProgressBar::ProgressBar(unsigned int, double, std::basic_ostream<char, std::char_traits<char> >&)