2013-02-15 140 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> >&) 
相關問題