2013-02-15 16 views
8

Uso il test di boost per i test delle unità e gcov e lcov per la misurazione della copertura.Come si ottengono i nomi delle funzioni effettive da queste uscite

Unfortuanlly GENHTML genera report come quello per la copertura funzione:

Function coverage

Ora voglio sapere qual è la funzione di _ZN7UtilLib11ProgressBarC2EjdRSo è in realtà.

Finora non posso correlare questa funzione a qualsiasi dell'interfaccia classe di 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); 
} 

Può uno aiutarmi come ottenere sia i nomi delle funzioni migliori con gcov o come si fa a capire questi nomi di funzione .

L'applicazione viene compilata con gcc4.7 con i seguenti flag: -g -g -save-temps=obj -Wall -Wextra -Wno-unused-parameter -Wno-error=unused-parameter -O0 -pedantic

+3

provare 'man C++ filt' – PlasmaHH

risposta

14

Questi sono i simboli straziati C++, utilizzare c++filt in un guscio di decodifica i essa:

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

Inoltre, dal momento che ti sembra di utilizzare genhtml, controllare l'opzione --demangle-cpp per effettuare automaticamente la disattivazione automatica.

Si noti che il compilatore emette due implementazioni per il responsabile che è stato scritto, utilizzando --demangle-cpp si nasconde la differenza che è visibile solo nel nome del simbolo storpiato. Per capire cosa sta facendo il compilatore, dai un'occhiata a here.

+1

Troppo lento di nuovo! –

3

Usa c++filt, in questo modo:

$c++filt -n _ZN7UtilLib11ProgressBarC2EjdRSo 

quali uscite:

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