Table des matières

Nightly pour Windows 64

C++ status, libstdc++ status

Ubuntu

Ubuntu ne fournit pas de méthode 100% automatique. Il faut passer manuellement par update-alternatives.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110 --slave /usr/bin/g++ g++ /usr/bin/g++-11

Utiliser pour switcher entre les versions :

sudo update-alternatives --config gcc

Diagnostic

Information et taille des classes et tables virtuelles

class VirtualBase
{
  public :
    virtual int tick(int n) = 0;
};
 
class VirtualDerived : public VirtualBase
{
  public :
    int m_counter;
  public :
    VirtualDerived() : m_counter(0) {}
    int tick(int n) { m_counter += n; return m_counter; }
};
Vtable for VirtualBase
VirtualBase::_ZTV11VirtualBase: 3 entries
0     (int (*)(...))0
8     (int (*)(...))(& _ZTI11VirtualBase)
16    (int (*)(...))__cxa_pure_virtual

Class VirtualBase
   size=8 align=8
   base size=8 base align=8
VirtualBase (0x0x6ffffbe0480) 0 nearly-empty
    vptr=((& VirtualBase::_ZTV11VirtualBase) + 16)

Vtable for VirtualDerived
VirtualDerived::_ZTV14VirtualDerived: 3 entries
0     (int (*)(...))0
8     (int (*)(...))(& _ZTI14VirtualDerived)
16    (int (*)(...))VirtualDerived::tick

Class VirtualDerived
   size=16 align=8
   base size=12 base align=8
VirtualDerived (0x0x6ffffc301a0) 0
    vptr=((& VirtualDerived::_ZTV14VirtualDerived) + 16)
  VirtualBase (0x0x6ffffbe04e0) 0 nearly-empty
      primary-for VirtualDerived (0x0x6ffffc301a0)

Ci-dessous, on affiche que le contenu des Dumping AST Record Layout.

*** Dumping AST Record Layout
         0 | class VirtualBase
         0 |   (VirtualBase vtable pointer)
           | [sizeof=8, dsize=8, align=8,
           |  nvsize=8, nvalign=8]

*** Dumping AST Record Layout
         0 | class VirtualDerived
         0 |   class VirtualBase (primary base)
         0 |     (VirtualBase vtable pointer)
         8 |   int m_counter
           | [sizeof=16, dsize=12, align=8,
           |  nvsize=12, nvalign=8]
Vtable for 'VirtualDerived' (3 entries).
   0 | offset_to_top (0)
   1 | VirtualDerived RTTI
       -- (VirtualBase, 0) vtable address --
       -- (VirtualDerived, 0) vtable address --
   2 | int VirtualDerived::tick(int)

VTable indices for 'VirtualDerived' (1 entries).
   0 | int VirtualDerived::tick(int)

Vtable for 'VirtualBase' (3 entries).
   0 | offset_to_top (0)
   1 | VirtualBase RTTI
       -- (VirtualBase, 0) vtable address --
   2 | int VirtualBase::tick(int) [pure]

VTable indices for 'VirtualBase' (1 entries).
   0 | int VirtualBase::tick(int)

gprof

Génère un graphe de l'utilisation des fonctions d'un programme (nécessite l'option de compilation -pg).

GPROF Tutorial – How to use Linux GNU GCC Profiling Tool Archive du 20/08/2012 le 24/02/2020

Couverture de code

Options à ajouter à la compilation : -O0 --coverage

Options à ajouter au lieur : --coverage

Puis exécuter le ou les programmes. Attention, pas d'exécution en parallèle. Les fichiers .gcno ne le supportent pas.

lcov --capture --directory build --gcov-tool /usr/bin/gcov-10 --rc lcov_branch_coverage=1 --output-file build/coverage.info
lcov --remove build/coverage.info "/usr/include/*" --rc lcov_branch_coverage=1 -o build/coverage2.info
genhtml --output-directory build/coverage --demangle-cpp --num-spaces 2 --sort --function-coverage --branch-coverage --legend build/coverage2.info
find build/coverage -name "*.html" -exec sed -i -r "s#headerValue""\>.*-.*-.* .*:.*:.*td#headerValue""></td#g" {} \;

Attention, la version de gcov doit correspondre à celle de gcc.

En option, on supprime la date pour qu'un diff simple puisse se faire.