2013-02-15 76 views
8

我使用boost测试进行单元测试,gcov和lcov用于测量覆盖率。如何从这些输出中获得实际函数名称

Unfortuanlly GENHTML产生这样的功能覆盖报告:

Function coverage

我现在想知道的是什么功能_ZN7UtilLib11ProgressBarC2EjdRSo实际上是。

到目前为止,我不能这个功能对任何进度的类接口的关联:

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

+3

尝试'男人的C++ filt' – PlasmaHH 2013-02-15 09:41:16

回答

14

这些都是错位的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将隐藏仅在损坏的符号名称中可见的差异。要了解编译器正在做什么,请看here

+1

太慢了! – 2013-02-15 09:45:08

3

使用c++filt,像这样:

$c++filt -n _ZN7UtilLib11ProgressBarC2EjdRSo 

,输出:

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