SlideShare a Scribd company logo
1 of 29
Download to read offline
Programmare in C su GNU/Linux
GCC (GNU Compiler Collection, in origine GNU C
  Compiler) è un insieme di compilatori creato
      inizialmente da Richard Stallman
        come parte del Sistema GNU
GCC può compilare :

  * Ada
  * Linguaggio C
  * C++
  * Fortran
  * Java
  * Objective-C
  * Objective-C++
GCC può generare codice macchina per i seguenti processori:

# Alpha
# ARM
# Blackfin
# H8/300
# System/370, System/390
# IA-32 (X86)‫‏‬
# EM64T,AMD64 (X64)‫‏‬
# IA-64 (Itanium)‫‏‬
# Motorola 68000
# Motorola 88000
# MIPS
# PA-RISC
# PDP-11
# PowerPC
# SuperH
# SPARC
# VAX


L'opzione -m nella sintassi di GCC permette di identificare il tipo di processore target
Per compilare un file di codice sorgente scritto in C, si può
  eseguire gcc fornendogli in input il file desiderato. Esiste un
  grandissimo numero di parametri che è possibile passare al
compilatore per gestire i vari aspetti e i vari dettagli del processo
       di generazione del codice; l'unico obbligatorio è il
                  nome del file da compilare.
La compilazione avviene in tre fasi:

1. il file da compilare viene trattato dal preprocessore, che
analizza le direttive scritte per il compilatore (definite in alcune
righe del codice, solitamente posizionate in testa al file e
precedute dal carattere #). Se eseguito con il parametro -E, gcc
esegue solo questo passo, fornendo in output il risultato delle
attività del preprocessore.

2. nella seconda fase il file dà origine ad un nuovo file formato
oggetto che non è ancora eseguibile

3. a questo punto entra in funzione il linker che, unendo tutti i file
oggetto tra loro e ai file delle librerie, produce un unico file
eseguibile contenente il tutto. Per non duplicare il codice delle
librerie nell'eseguibile si può usare il collegamento dinamico.
Dove si trovano gli header file?

Generalmente la posizione in cui sono stati
installati è sotto:

/usr/include
Glibc (set di librerie standard c) riporta gli
header file dello standard Posix e ANSI C
E' possibile ottenere una conformità stretta allo standard
(scartando le funzionalità addizionali) usando il gcc con l'opzione
 -ansi. Questa opzione istruisce il compilatore a definire nei vari
header file soltanto le funzionalità previste dallo standard ANSI C
                 e a non usare le varie estensioni.
Alcune opzioni nella sintassi di GCC:

-x : specifica in maniera esplicita il tipo di linguaggio del file
sorgente.

-c : compila ma non linka. Il linking stage è ignorato. L'output è in
formato oggetto.

-E : preprocessa ma non compila. Il compiling stage è ignorato.
L'output è informato sorgente preprocessato.

-o : permette di scegliere il nome file di output, in base all'output
desiderato

Per ulteriori informazioni --help (o consultare le pagine manuale
man gcc )‫‏‬
Esercizio 0

creare un file di testo helloworld.c
contenente il codice per stampare su video la frase “Hello World”
quindi compilare.
Alcune differenze con Windows
La portabilità su GNU/Linux di programmi che sfruttano i protocolli TCP/IP sotto
Windows,risulta difficile poiché nei sistemi operativi Microsoft si utilizza la
libreria Winsock

mentre su GNU/Linux le librerie sono diversificate in base alla tipologia di
protocollo (generalmente sotto /usr/include/net , /usr/include/sys etc.. )‫‏‬
Cmake
Creare un programma eseguibile da più file sorgente consiste
  nel compilare separatamente i file sorgenti uno ad uno e poi
                 unirli nel file eseguibile finale.

Ma quando i file sorgente sono molti, come si fa a far si che non
                 diventi snervante il compilare?

    Semplicemente creando un file contente il compilatore da
 usare, in che modo usarlo, quali file compilare, come creare il
file eseguibile (programma o libreria che esso sia) e altre cose
      sempre utili, come la directory dove trovare le librerie
                  necessarie ed i file di include.
             Questo è il contenuto del file Makefile.
Un semplice makefile è composto da un insieme di regole, con la seguente forma:

     target: dipendenze
     <TAB> comando
            .......
            .......

Un target è di solito il nome di un file, che è generato da un programma; esempi di file
target sono i file eseguibili e i file oggetto.

Una dipendenza è un file che viene usato come input per creare il target. Un target
spesso dipende da diversi file.

Un comando è un azione da compiere. Una regola può essere composta da più di un
comando, su una linea.

Notate Attentamente: Si deve mettere un carattere TAB all'inzio di ogni linea di
comando, per far sí che il make legga la linea in maniera corretta.

Una regola spiega come e quando fare il make di dati file, che sono i target della data
linea.
Cmake (cross platform make) è un generatore di makefile.

Per la compilazione del programma è necessario verificare che
siano incluse tutte le librerie e scovare i loro percorsi all'interno
del file system.

Questo renderà possibile l'installazione (compilazione etc) di un
software a partire dal trittico:

./configure
make
make install
CMake dispone di una particolare sintassi
 comprensiva di moltissime macro ed il loro
utilizzo è possibile mediante un apposito file
           chiamato CMakeLists.txt
Cmake è disponibile sia come comando via terminale
che tramite un front-end grafico.

Il sito web di riferimento per cmake è : http://www.cmake.org/
Eclipse è un software opensource scritto in Java, prerogativa di
  tale programma è quello di fornire un ambiente (IDE) per la
                   programmazione in Java.
La piattaforma di sviluppo è incentrata sull'uso di plug-in, delle
   componenti software ideate per uno specifico scopo, per
esempio la generazione di diagrammi UML, tutta la piattaforma
             è considerabile un insieme di plug-in.
Si passa infatti da un completo IDE per
 il linguaggio Java (JDT, "Java Development Tools")
             ad un ambiente di sviluppo per i
linguaggi C/C++ (CDT, "C/C++ Development Tools")‫‏‬
Su Ubuntu è possibile scaricare Eclipse (tramite pacchetto deb)
utilizzando:

Gestore dei pacchetti Synaptic (in modalità grafica)‫‏‬

oppure via apt-get (in modalità terminale)‫‏‬
Qualora non dovesse funzionare il sistema di software update
basato su repository di Eclipse è possibile scaricare i plugin CDT
da:

http://download.eclipse.org/tools/cdt/builds/6.0.0/
I.I200902031437/index.html
In Eclipse possiamo definire 2 tipi di progetto:

Standard C Project

Qualora non necessitiamo di un makefile o lo vogliamo creare in
un secondo momento con software esterno.

Managed C Project

Quando non abbiamo il makefile e vogliamo demandare la sua
creazione ad Eclipse
Per il debugging Eclipse utilizza di default GDB (GNU Source Level-Debugger)‫‏‬
il quale consente di:

Avviare il programma, specificando tutto ciò che influisce sul suo comportamento.

Fare in modo che il programma si interrompa sotto date condizioni

Esaminare quello che è accaduto, quando il programma è stato interrotto.

Cambiare il programma, in modo che si possano sperimentare gli effetti delle
correzioni di un dato bug

Per usare GDB occore produrre le informazioni necessarie in fase di compilazione,
utilizzando l'opzione -g (da gcc), che produrrà le info extra per il debugging.

More Related Content

What's hot

Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneFulvio Corno
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]Matteo Collica
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsGaetano Giunta
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Daniele Falamesca
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)CRS4 Research Center in Sardinia
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@UninaNaLUG
 
Introduzione a libavfilter
Introduzione a libavfilterIntroduzione a libavfilter
Introduzione a libavfilterStefano Sabatini
 

What's hot (17)

Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazione
 
Conferenza Pymaemo
Conferenza PymaemoConferenza Pymaemo
Conferenza Pymaemo
 
SVN/TRAC
SVN/TRACSVN/TRAC
SVN/TRAC
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]
 
Linux shell
Linux shellLinux shell
Linux shell
 
Introduzione al PHP
Introduzione al PHPIntroduzione al PHP
Introduzione al PHP
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez components
 
Introduzione ros
Introduzione rosIntroduzione ros
Introduzione ros
 
Livecode
LivecodeLivecode
Livecode
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
 
Protocollo ssh
Protocollo sshProtocollo ssh
Protocollo ssh
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 
Dot net framework 2
Dot net framework 2Dot net framework 2
Dot net framework 2
 
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
 
Guida C++
Guida C++Guida C++
Guida C++
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
 
Introduzione a libavfilter
Introduzione a libavfilterIntroduzione a libavfilter
Introduzione a libavfilter
 

Viewers also liked (7)

Sun is power
Sun is powerSun is power
Sun is power
 
Are You Paying Attention?
Are You Paying Attention?Are You Paying Attention?
Are You Paying Attention?
 
Go Solar
Go SolarGo Solar
Go Solar
 
Process Book
Process BookProcess Book
Process Book
 
Speaker Video new
Speaker Video newSpeaker Video new
Speaker Video new
 
The Twilight Zone Story
The Twilight Zone StoryThe Twilight Zone Story
The Twilight Zone Story
 
Renewable Energy
Renewable EnergyRenewable Energy
Renewable Energy
 

Similar to GNU Linux Programming introduction

PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxMarco Ferrigno
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationTiziano Serritella
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazioneDaniele Costarella
 
Capitolo 7 elementi di programmazione c-c++
Capitolo 7   elementi di programmazione  c-c++Capitolo 7   elementi di programmazione  c-c++
Capitolo 7 elementi di programmazione c-c++Giovanni Della Lunga
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxPaolo Campegiani
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...LeonardoIurada
 
XeDotNet - Source Generator
XeDotNet - Source GeneratorXeDotNet - Source Generator
XeDotNet - Source GeneratorMarco Bortolin
 
Webinar porting e ottimizzazione per x86
Webinar   porting e ottimizzazione per x86Webinar   porting e ottimizzazione per x86
Webinar porting e ottimizzazione per x86Massimiliano Torregiani
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxAlex Palesandro
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicinodavide ficano
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007pino_otto
 

Similar to GNU Linux Programming introduction (20)

PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
 
GNU Linux introduction
GNU Linux introductionGNU Linux introduction
GNU Linux introduction
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
Linux Embedded per l'automazione
Linux Embedded per l'automazioneLinux Embedded per l'automazione
Linux Embedded per l'automazione
 
Capitolo 7 elementi di programmazione c-c++
Capitolo 7   elementi di programmazione  c-c++Capitolo 7   elementi di programmazione  c-c++
Capitolo 7 elementi di programmazione c-c++
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
XeDotNet - Source Generator
XeDotNet - Source GeneratorXeDotNet - Source Generator
XeDotNet - Source Generator
 
Introduzione a .Net Core
Introduzione a .Net CoreIntroduzione a .Net Core
Introduzione a .Net Core
 
Webinar porting e ottimizzazione per x86
Webinar   porting e ottimizzazione per x86Webinar   porting e ottimizzazione per x86
Webinar porting e ottimizzazione per x86
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/Linux
 
Beryl
BerylBeryl
Beryl
 
Visual studio code
Visual studio codeVisual studio code
Visual studio code
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
 
Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007
 
Reportage Delphi Day 2012
Reportage Delphi Day 2012Reportage Delphi Day 2012
Reportage Delphi Day 2012
 

GNU Linux Programming introduction

  • 1. Programmare in C su GNU/Linux
  • 2.
  • 3. GCC (GNU Compiler Collection, in origine GNU C Compiler) è un insieme di compilatori creato inizialmente da Richard Stallman come parte del Sistema GNU
  • 4. GCC può compilare : * Ada * Linguaggio C * C++ * Fortran * Java * Objective-C * Objective-C++
  • 5. GCC può generare codice macchina per i seguenti processori: # Alpha # ARM # Blackfin # H8/300 # System/370, System/390 # IA-32 (X86)‫‏‬ # EM64T,AMD64 (X64)‫‏‬ # IA-64 (Itanium)‫‏‬ # Motorola 68000 # Motorola 88000 # MIPS # PA-RISC # PDP-11 # PowerPC # SuperH # SPARC # VAX L'opzione -m nella sintassi di GCC permette di identificare il tipo di processore target
  • 6. Per compilare un file di codice sorgente scritto in C, si può eseguire gcc fornendogli in input il file desiderato. Esiste un grandissimo numero di parametri che è possibile passare al compilatore per gestire i vari aspetti e i vari dettagli del processo di generazione del codice; l'unico obbligatorio è il nome del file da compilare.
  • 7. La compilazione avviene in tre fasi: 1. il file da compilare viene trattato dal preprocessore, che analizza le direttive scritte per il compilatore (definite in alcune righe del codice, solitamente posizionate in testa al file e precedute dal carattere #). Se eseguito con il parametro -E, gcc esegue solo questo passo, fornendo in output il risultato delle attività del preprocessore. 2. nella seconda fase il file dà origine ad un nuovo file formato oggetto che non è ancora eseguibile 3. a questo punto entra in funzione il linker che, unendo tutti i file oggetto tra loro e ai file delle librerie, produce un unico file eseguibile contenente il tutto. Per non duplicare il codice delle librerie nell'eseguibile si può usare il collegamento dinamico.
  • 8. Dove si trovano gli header file? Generalmente la posizione in cui sono stati installati è sotto: /usr/include
  • 9. Glibc (set di librerie standard c) riporta gli header file dello standard Posix e ANSI C
  • 10.
  • 11. E' possibile ottenere una conformità stretta allo standard (scartando le funzionalità addizionali) usando il gcc con l'opzione -ansi. Questa opzione istruisce il compilatore a definire nei vari header file soltanto le funzionalità previste dallo standard ANSI C e a non usare le varie estensioni.
  • 12. Alcune opzioni nella sintassi di GCC: -x : specifica in maniera esplicita il tipo di linguaggio del file sorgente. -c : compila ma non linka. Il linking stage è ignorato. L'output è in formato oggetto. -E : preprocessa ma non compila. Il compiling stage è ignorato. L'output è informato sorgente preprocessato. -o : permette di scegliere il nome file di output, in base all'output desiderato Per ulteriori informazioni --help (o consultare le pagine manuale man gcc )‫‏‬
  • 13. Esercizio 0 creare un file di testo helloworld.c contenente il codice per stampare su video la frase “Hello World” quindi compilare.
  • 14. Alcune differenze con Windows La portabilità su GNU/Linux di programmi che sfruttano i protocolli TCP/IP sotto Windows,risulta difficile poiché nei sistemi operativi Microsoft si utilizza la libreria Winsock mentre su GNU/Linux le librerie sono diversificate in base alla tipologia di protocollo (generalmente sotto /usr/include/net , /usr/include/sys etc.. )‫‏‬
  • 15. Cmake
  • 16. Creare un programma eseguibile da più file sorgente consiste nel compilare separatamente i file sorgenti uno ad uno e poi unirli nel file eseguibile finale. Ma quando i file sorgente sono molti, come si fa a far si che non diventi snervante il compilare? Semplicemente creando un file contente il compilatore da usare, in che modo usarlo, quali file compilare, come creare il file eseguibile (programma o libreria che esso sia) e altre cose sempre utili, come la directory dove trovare le librerie necessarie ed i file di include. Questo è il contenuto del file Makefile.
  • 17. Un semplice makefile è composto da un insieme di regole, con la seguente forma: target: dipendenze <TAB> comando ....... ....... Un target è di solito il nome di un file, che è generato da un programma; esempi di file target sono i file eseguibili e i file oggetto. Una dipendenza è un file che viene usato come input per creare il target. Un target spesso dipende da diversi file. Un comando è un azione da compiere. Una regola può essere composta da più di un comando, su una linea. Notate Attentamente: Si deve mettere un carattere TAB all'inzio di ogni linea di comando, per far sí che il make legga la linea in maniera corretta. Una regola spiega come e quando fare il make di dati file, che sono i target della data linea.
  • 18. Cmake (cross platform make) è un generatore di makefile. Per la compilazione del programma è necessario verificare che siano incluse tutte le librerie e scovare i loro percorsi all'interno del file system. Questo renderà possibile l'installazione (compilazione etc) di un software a partire dal trittico: ./configure make make install
  • 19. CMake dispone di una particolare sintassi comprensiva di moltissime macro ed il loro utilizzo è possibile mediante un apposito file chiamato CMakeLists.txt
  • 20. Cmake è disponibile sia come comando via terminale che tramite un front-end grafico. Il sito web di riferimento per cmake è : http://www.cmake.org/
  • 21.
  • 22.
  • 23. Eclipse è un software opensource scritto in Java, prerogativa di tale programma è quello di fornire un ambiente (IDE) per la programmazione in Java.
  • 24. La piattaforma di sviluppo è incentrata sull'uso di plug-in, delle componenti software ideate per uno specifico scopo, per esempio la generazione di diagrammi UML, tutta la piattaforma è considerabile un insieme di plug-in.
  • 25. Si passa infatti da un completo IDE per il linguaggio Java (JDT, "Java Development Tools") ad un ambiente di sviluppo per i linguaggi C/C++ (CDT, "C/C++ Development Tools")‫‏‬
  • 26. Su Ubuntu è possibile scaricare Eclipse (tramite pacchetto deb) utilizzando: Gestore dei pacchetti Synaptic (in modalità grafica)‫‏‬ oppure via apt-get (in modalità terminale)‫‏‬
  • 27. Qualora non dovesse funzionare il sistema di software update basato su repository di Eclipse è possibile scaricare i plugin CDT da: http://download.eclipse.org/tools/cdt/builds/6.0.0/ I.I200902031437/index.html
  • 28. In Eclipse possiamo definire 2 tipi di progetto: Standard C Project Qualora non necessitiamo di un makefile o lo vogliamo creare in un secondo momento con software esterno. Managed C Project Quando non abbiamo il makefile e vogliamo demandare la sua creazione ad Eclipse
  • 29. Per il debugging Eclipse utilizza di default GDB (GNU Source Level-Debugger)‫‏‬ il quale consente di: Avviare il programma, specificando tutto ciò che influisce sul suo comportamento. Fare in modo che il programma si interrompa sotto date condizioni Esaminare quello che è accaduto, quando il programma è stato interrotto. Cambiare il programma, in modo che si possano sperimentare gli effetti delle correzioni di un dato bug Per usare GDB occore produrre le informazioni necessarie in fase di compilazione, utilizzando l'opzione -g (da gcc), che produrrà le info extra per il debugging.