如何从这些输出中获取实际的函数名称

时间:2013-02-15 09:37:27

标签: c++ gcov

我使用升压测试进行单元测试,使用gcov和lcov测量覆盖率。

unfortuanlly genhtml为功能覆盖生成类似的报告:

Function coverage

我现在想知道函数_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

2 个答案:

答案 0 :(得分:14)

这些是受损的C ++符号,在shell中使用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将隐藏仅在受损的符号名称中可见的差异。要了解编译器正在做什么,请查看here

答案 1 :(得分:3)

使用c++filt,如下所示:

 $c++filt -n _ZN7UtilLib11ProgressBarC2EjdRSo

输出:

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