Nightly pour Windows 64
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
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; } };
g++ -fdump-class-hierarchy -c main.cc
g++ -fdump-lang-class -c main.cc
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)
clang -cc1 -emit-llvm -fdump-record-layouts main.cc
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]
clang -cc1 -emit-llvm -fdump-vtable-layouts main.cc
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)
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
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.