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

9
我使用boost test进行单元测试,使用gcov和lcov来衡量覆盖率。
不幸的是,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个回答

15

这些是混淆后的C++符号,可以在shell中使用c++filt解混淆:

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

另外,由于您似乎使用了genhtml,请查看--demangle-cpp选项,以便自动为您执行解缠操作。

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


3

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

 $c++filt -n _ZN7UtilLib11ProgressBarC2EjdRSo

它的输出结果为:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接