Nightly pour [[https://bitbucket.org/ejsvifq_mabmip/mingw-gcc/src/master/|Windows 64]]
[[https://gcc.gnu.org/projects/cxx-status.html|C++ status]], [[https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html|libstdc++ status]]
====Ubuntu====
* Installation en parallèle
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; }
};
* Jusqu'à gcc 7 : ''g++ -fdump-class-hierarchy -c main.cc''
* A partir de gcc 8 : ''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 : ''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]
* Table virtuelle uniquement : ''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)
====gprof====
Génère un graphe de l'utilisation des fonctions d'un programme (nécessite l'option de compilation ''-pg'').
[[https://www.thegeekstuff.com/2012/08/gprof-tutorial/|GPROF Tutorial – How to use Linux GNU GCC Profiling Tool]] {{ :prog:gcc:gprof_tutorial_how_to_use_linux_gnu_gcc_profiling_tool_2020-02-24_3_24_57_pm_.html |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"">
Attention, la version de gcov doit correspondre à celle de gcc.
En option, on supprime la date pour qu'un diff simple puisse se faire.