Vous êtes sur la page 1sur 16

LOG1000

Génie logiciel

C02B
LOG1000
GCC et GDB
Ingénierie logicielle
1. Code source
et compilation

2. Qu’est-ce GCC
que GCC ?
(GNU Compiler Collection)
3. GCC et Make
et GDB
4. GDB (GNU Debugger)

Département de génie informatique et de


génie logiciel 1

Avec du matériel produit par Bram Adams, Michel Gagnon et Nikolay Radoev 1
LOG1000
Génie logiciel Gestion de configuration logicielle
C02B
GCC et GDB

1. Code source
et compilation

2. Qu’est-ce
que GCC ?

3. GCC et Make

4. GDB

2
LOG1000
Génie logiciel Outils d’intégration (« build systems »)
C02B
GCC et GDB ●
Objectif : prendre tous les fichiers et les
assembler en un logiciel fonctionnel :
1. Code source
et compilation

Code source,
2. Qu’est-ce

Images, modèles 3D,
que GCC ?

3. GCC et Make

Données et bases de données,
4. GDB

Librairies et code réutilisé,

Etc.

3
LOG1000
Génie logiciel Outils d’intégration (« build systems »)
C02B
GCC et GDB ●
Ces outils facilitent la transformation :

code source lisible par les humains → code
1. Code source
et compilation
binaire lisible par la machine.
2. Qu’est-ce
que GCC ?

3. GCC et Make
Code de Code de Code
Code
4. GDB haut bas binaire
objet
niveau niveau fonctionnel

Code binaire
Ex.: Python, Ex.: C, C++ Ex.: .exe, .DLL
non-lié à ses
Ruby
dépendances
Ex.: .o

Interprétation Compilation “Linking”


Ex.: JRuby Ex.: GCC Ex.: GCC peut
transforme le transforme le aussi lier les
code Ruby en code C++ fichiers .o pour
code Java. (fichier .cpp) en former un
code objet fichier .exe
(fichier .o).
4
LOG1000
Génie logiciel Pourquoi a-t-on besoin de l’étape du « linking » ?
C02B
GCC et GDB ●
Ce n'est pas obligatoire → certains vieux compilateurs
s'en passait (ex. Turbo Pascal <4.0).

1. Code source

Cette étape permet séparer le code en sous-éléments :
et compilation

Si un seul sous-élément est modifié, je n'ai besoin de re-
2. Qu’est-ce compiler que ce sous-élément.
que GCC ?

3. GCC et Make

Je peux ensuite produire l'exécutable en faisant le
« linking » des vieux fichiers .o des sous-éléments non-
4. GDB modifiés, avec le nouveau .o compilé.

Cette étape permet de séparer le code des librairies
externes utilisées :

Ex.: stdio, iostream en C/C++,

Ex.: DLL avec Windows,

Le « linking » va lier les fichiers .o avec la dernière version
des librairies installée sur la machine.
– Durant le « linking » en C/C++,
5
– Durant l'exécution avec les DLL (dynamic linking).
LOG1000
Génie logiciel Pourquoi a-t-on besoin de l’étape du « linking » ?
C02B
GCC et GDB

main.c newton.h comparison.h

1. Code source newton.c comparison.c


et compilation
compilation #1 compilation #3
2. Qu’est-ce compilation #2
que GCC ?

3. GCC et Make
main.o newton.o comparison.o
4. GDB

« linking »

executable

La compilation prend plus de temps que le « linking ».

Si je change « newton.c », je n'ai pas besoin de tout
recompiler. Je peux juste refaire la compilation #2. 6

Utile pour un projet typique avec des centaines de fichiers.
LOG1000
Génie logiciel Qu’est-ce que GCC ?
C02B
GCC et GDB ●
GCC (GNU Compiler Collection) est l'outil de
base sur Linux pour la compilation et le
1. Code source
« linking » de code source.
et compilation

Il supporte une grande gamme de langages de
2. Qu’est-ce
que GCC ? programmation, dont le C/C++.
3. GCC et Make ●
Exemple minimal basé sur les fichiers
4. GDB
précédents :
compilations
gcc -o main.o -c main.c
gcc -o newton.o -c newton.c
gcc -o comparison.o -c comparison.c

gcc -o executable main.o newton.o comparison.o


« linking »


Notez qu'on ne spécifie pas les fichiers .h : en
lisant les fichiers, GCC va voir les « include » et7
les ajouter.
LOG1000
Génie logiciel Qu’est-ce que GCC ?
C02B
GCC et GDB
gcc -o main.o -c main.c

1. Code source
et compilation Nom du fichier à compiler
Indique que le prochain
2. Qu’est-ce
que GCC ?
argument est le fichier
de sortie (« output file »)
3. GCC et Make
Nom du fichier à produire
4. GDB

Indique que le prochain


argument est le fichier
pour lequel il faut faire
une compilation, mais
pas de « linking »

GCC peut sauter l’étape intermédiaire des fichiers


objets (.o) et produire directement un exécutable.
Utile pour des petits logiciels avec peu de code.
8
LOG1000
Génie logiciel Qu’est-ce que GCC ?
C02B
GCC et GDB
gcc -o executable main.o newton.o comparison.o

1. Code source
et compilation
Indique que le prochain
2. Qu’est-ce
que GCC ?
argument est le fichier
de sortie (« output file ») Liste des fichiers qui
3. GCC et Make seront pris en entrée.
Nom du fichier à produire
4. GDB


GCC est très flexible et peut être utilisé selon vos
besoins.

Ex.: La commande suivante produit l'exécutable
directement sans la création des fichiers objets
intermédiaires (.o).
gcc -o executable main.c newton.c comparison.c
9
LOG1000
Génie logiciel Qu’est-ce que GCC ?
C02B
GCC et GDB

GCC offre une très large gamme d'options pour
la compilation et le « linking » selon les besoins
de l'application. En voici quelques-unes :
1. Code source
et compilation ●
Lors de la compilation, affiche une série
2. Qu’est-ce importante d'avertissements (« warnings ») :
que GCC ?
gcc -o test.o -c test.c -Wall
3. GCC et Make

4. GDB

Lors du « linking », ajoute les librairies standard
de mathématiques (ex.: math.h).
gcc -o executable main.o test.o -lm

Lors de la compilation, affiche tous les
avertissements recommandés par l'ISO :
gcc -o test.o -c test.c -Wpedantic

Lors de la compilation, ajoute des informations
dans le fichier binaire afin d'aider le débogage :10
gcc -o test.o -c test.c -g
LOG1000
Génie logiciel Qu’est-ce que GCC ?
C02B
GCC et GDB ●
GCC est le compilateur pour le langage C.

Pour le langage C++, il faut utiliser le compilateur
1. Code source
et compilation
G++.
2. Qu’est-ce

Dans les faits, G++ appelle le compilateur GCC
que GCC ?
avec des options particulières :
3. GCC et Make

4. GDB -xc++ -lstdc++ -shared-libgcc

Utilise le compilateur Fait le « linking » avec


de C++ les librairies C++


Plutôt que de devoir se rappeler ces options un
peu obscures, on utilise g++ :
g++ -o main.o -c main.cpp
g++ -o test.o -c test.cpp 11
g++ -o executable main.o test.o
LOG1000
Génie logiciel Outils d’intégration (« build systems »)
C02B
GCC et GDB ●
OK, on comprend comment utiliser GCC et G++.

Mais se rappeler et taper toutes ces commandes
1. Code source
et compilation
à chaque fois est plutôt laborieux.
2. Qu’est-ce

Sur Visual Studio, il suffisait de pousser un
que GCC ?
bouton et tout le code était compilé, lié et
3. GCC et
Make exécuté.
4. GDB ●
Peut-on faire la même chose ?

12
LOG1000
Génie logiciel Outils d’intégration (« build systems »)
C02B
GCC et GDB ●
L'outil GNU Make permet d'automatiser des
commandes Linux : n'importe quelles
1. Code source
commandes.
et compilation

Cela inclut donc gcc/g++ !
2. Qu’est-ce
que GCC ? ●
On spécifie les commandes dans un fichier
3. GCC et
Make
appelé « Makefile », équivalent au fichier de
4. GDB
projet dans Visual Studio.

13
LOG1000
Génie logiciel GDB (GNU Debugger)
C02B
GCC et GDB ●
Visual Studio offre un outil pour aider le
débogage. GNU en offre aussi un en ligne de
1. Code source
commandes : GDB
et compilation

L'outil est déjà installé sur la machine virtuelle.
2. Qu’est-ce
que GCC ? ●
Pour s'en servir, il faut compiler le code (.c
3. GCC et Make
→ .o) avec une option particulière : "-g". Cette
4. GDB option laisse des marques dans le binaire que
GDB peut utiliser.
gcc -o main.o -c main.c -g

Pour lancer le débogueur :
gdb --args newton 49 3
nom de l’exécutable
premier argument passé à l’exécutable 14

deuxième argument passé à l’exécutable


LOG1000
Génie logiciel GDB (GNU Debugger)
C02B
GCC et GDB ●
Une fois GDB lancé, on entre dans une fenêtre
de commandes, où on peut entrer les
1. Code source
commandes suivantes :
et compilation

l (L minuscule) : liste les 10 prochaines lignes
2. Qu’est-ce
que GCC ? de code.
3. GCC et Make ●
b 36 : met un point d'arrêt (« breakpoint ») à la
4. GDB ligne 36.

r : exécute le code avec les points d'arrêts
définis.

print x : affiche la valeur de la variable x.

next : exécute la ligne de code suivante.

step : entre dans le code de la fonction
appelée.

q : quitte le débogueur. 15
LOG1000
Génie logiciel GDB (GNU Debugger)
C02B
GCC et GDB ●
N'oubliez pas d'enlever l'option "-g" avant de
livrer le code !
1. Code source
et compilation

Pour plus d'informations sur GDB :
2. Qu’est-ce
que GCC ?https://www.tutorialspoint.com/gnu_debugger/gdb_commands.htm
3. GCC et Make

4. GDB

16

Vous aimerez peut-être aussi