2013-02-15 7 views
8

Ich verwende Boost-Test für Unit-Tests und GCOV und LCOV für die Messung der Abdeckung.Wie bekommt man die tatsächlichen Funktionsnamen von diesen Ausgaben

Unfortuanlly GenHTML generiert Berichte wie die für Funktionsabdeckung:

Function coverage

Ich möchte jetzt wissen, was die Funktion _ZN7UtilLib11ProgressBarC2EjdRSo tatsächlich ist.

Bisher habe ich diese Funktion, um jede der Klasse Schnittstelle von ProgressBar nicht korrelieren:

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); 
} 

Kann jemand mir helfen, wie entweder eine bessere Funktionsnamen zu bekommen mit gcov oder wie man diese Funktion Namen nicht versteht .

Die Anwendung wird mit gcc4.7 mit den folgenden Flags zusammengestellt: -g -g -save-temps=obj -Wall -Wextra -Wno-unused-parameter -Wno-error=unused-parameter -O0 -pedantic

+3

versuchen 'man C++ filt' – PlasmaHH

Antwort

14

Dies sind verstümmelt C++ Symbole verwenden c++filt in einer Schale es demangle:

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

Auch da Sie scheinen Verwenden Sie genhtml, überprüfen Sie die --demangle-cpp Option, um die Entmagnetisierung automatisch für Sie durchzuführen.

Beachten Sie, dass der Compiler zwei Implementierungen für den von Ihnen geschriebenen ctor ausgibt, wobei --demangle-cpp die Differenz verbergen, die nur im Namen des entstellten Symbols sichtbar ist. Um zu verstehen, was der Compiler macht, werfen Sie einen Blick auf here.

+1

wieder zu langsam! –

3

Verwenden c++filt, wie folgt aus:

$c++filt -n _ZN7UtilLib11ProgressBarC2EjdRSo 

die Ausgänge:

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