Как можно получить реальные имена функций из этих выходных данных

Я использую буст-тест для юнит-тестирования, а 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

8

Решение

Это искаженные символы 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 будет скрывать разницу, которая видна только в искаженном имени символа. Чтобы понять, что делает компилятор, взгляните Вот.

14

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

использование c++filt, как это:

 $c++filt -n _ZN7UtilLib11ProgressBarC2EjdRSo

какие выводы:

 UtilLib::ProgressBar::ProgressBar(unsigned int, double, std::basic_ostream<char, std::char_traits<char> >&)
3

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