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

Я использую ускоренный тест для модульного тестирования и 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


person tune2fs    schedule 15.02.2013    source источник


Ответы (2)


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

person Daniel Frey    schedule 15.02.2013

Используйте c++filt, например:

 $c++filt -n _ZN7UtilLib11ProgressBarC2EjdRSo

который выводит:

 UtilLib::ProgressBar::ProgressBar(unsigned int, double, std::basic_ostream<char, std::char_traits<char> >&)
person Mats Petersson    schedule 15.02.2013