8

我使用 boost test 进行单元测试,使用 gcov 和 lcov 来测量覆盖率。

Unfortuanlly 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

4

2 回答 2

15

这些是损坏的 C++ 符号,c++filt在 shell 中使用来对其进行解码:

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

此外,由于您似乎使用genhtml,请查看--demangle-cpp自动为您进行拆解的选项。

请注意,编译器为您编写的 ctor 发出两个实现,使用--demangle-cpp将隐藏仅在损坏的符号名称中可见的差异。要了解编译器在做什么,请查看此处

于 2013-02-15T09:44:11.867 回答
3

使用c++filt,像这样:

 $c++filt -n _ZN7UtilLib11ProgressBarC2EjdRSo

输出:

 UtilLib::ProgressBar::ProgressBar(unsigned int, double, std::basic_ostream<char, std::char_traits<char> >&)
于 2013-02-15T09:44:55.373 回答