Introduzione a Linux: differenze con windows e strumenti per la programmazione

62
Introduzione a Linux Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)] www.torlug.org www.cs.uniroma2.it Differenze con Windows e strumenti per la programmazione Corso di Laboratorio di Programmazione dei calcolatori 2007 [email protected]

description

Introduction to Linux, gcc & gdb (in Italian).

Transcript of Introduzione a Linux: differenze con windows e strumenti per la programmazione

Page 1: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione a Linux

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Differenze con Windows e strumenti per la programmazione

Corso di Laboratorio di Programmazione dei calcolatori 2007

[email protected]

Page 2: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Cos'è Linux ?

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

● Il cuore di un sistema operativo (Linux Kernel)– Sviluppato inizialmente da Linus Torvalds, oggi da una

comunità di persone che lavorano delocalizzate.– Software Libero!

● Distribuzione GNU-Linux (Linux Distro): un sistema operativo completo (Kernel + Compilatore + Applicazioni)– TANTI sistemi operativi Linux ( http://distrowatch.com/ ).

Page 3: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distro Linux: Pro

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

● Software Libero !– Modificabile– In rapida evoluzione– Gratuito

● Sicuro e stabile– Virus? Quali virus?– Esecuzione esplicita di programmi = Eliminazione

necessità firewall.

Page 4: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distro Linux: Pro

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

● Vasta comunità di utenti– Forum e LUG di supporto.– Nuovi amici

● Grande varietà di software.

Page 5: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distro Linux: Contro

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

● Mancanza del supporto hardware.● Integrazione funzionalità desktop sufficiente ma

ancora da migliorare.● Milioni di programmi, centinaia di distro: che

fatica l'integrazione! (per fortuna ci sono i gestori di pacchetti che risolvono le dipendenze)

● Mancanza di supporto sui normali canali commerciali.

Page 6: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distro Linux: Quale ?

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

http://www.opensuse.org/

http://reallylinux.com/docs/choosinglinux.shtml

http://www.ubuntulinux.com

Page 7: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Il filesystem di Linux

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 8: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Il filesystem di LinuxDifferenze con Windows

● In Linux i file sono ordinati in una unica gerarchia di cartelle.

● I percorsi si indicano con il front-slash / e non con il back-slash \ .

Ad esempio i file dell'utente pippo si trovano in:

/home/pippo/invece che in “c:\Documents and Settings\pippo\”

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 9: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Il filesystem di LinuxDescrizione generale delle cartelle

● /boot : contiene i file necessari all'avvio del sistema.● /sbin : contiene i programmi per l'amministrazione del

sistema (es: configurazione hardware). ● /bin: contiene programmi di utilità.● /lib: contiene le librerie utilizzabili dai vostri programmi.● /etc : contiene i file di configurazione del sistema.● /home : contiene i file personali degli utenti.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 10: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Il filesystem di LinuxDescrizione generale delle cartelle 2

● /root : la home dell'utente root.● /mnt : contiene i mount point per altre periferiche di

memoria di massa.● /lost+found : file recuperati da blocchi di sistema● /dev : contiene file che rappresentano periferiche

hardware.● /proc : contiene file che rappresentano processi.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 11: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Il filesystem di LinuxDescrizione generale delle cartelle 3

● /opt : contiene programmi non previsti dal sistema di base.

● /var : contiene file variabili (log di sistema, archivi di progetto, .... ).

● /tmp : contiene file temporanei.● /usr : contiene file e programmi degli utenti condivisi

tra gli utenti.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 12: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Il filesystem di LinuxDifferenze con Windows 2

● Linux è case sensitive !!! (come il C)● Le applicazioni sono “sparse” per il filesystem.

Dal momento che non esistono i drive (A per il floppy , C per il disco fisso, D per il cdrom, ....), come accedo ad i file sul mio floppy disk o sulla mia penna usb ?

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 13: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Il filesystem di LinuxDifferenze con Windows 3

● Per accedere ad i file su un dispositivo esterno (floppy disk, penna usb, ecc..) devo prima fare (o il sistema, dopo aver rilevato la periferica, esegue) il mount del dispositivo.

● I file “appariranno come per magia” in una sotto cartella del filesystem.

● Quando ho finito con i file, prima di scollegare il dispositivo DEVO fare l'unmount del dispositivo.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 14: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Il filesystem di LinuxGli utenti, i gruppi ed i loro file

● Linux è un sistema multi-utente;● Un utente è identificato da una coppia

username e password;● Ciò che un utente può fare o non può fare è

definito da i suoi permessi sui file.● root è il super utente: può fare tutto su tutti.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 15: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Il filesystem di LinuxGli utenti, i gruppi ed i loro file 2

● In Linux sono inoltre definiti i gruppi di utenti.● Un utente appartiene almeno ad un gruppo;● E' possibile impostare dei permessi specifici ad

un gruppo, senza dover impostare tali permessi ad ogni utente di quel gruppo.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 16: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Il filesystem di LinuxGli utenti, i gruppi ed i loro file 3

● Ad ogni file sono associati:– l'utente proprietario del file ed i permessi che

quest'ultimo ha sul file stesso.– un gruppo di utenti (generalmente il gruppo principale

del proprietario) ed i permessi che gli utenti di questo gruppo hanno sul file stesso

– i permessi concessi a tutti coloro che non sono il proprietario e non appartengono al gruppo associato.

Page 17: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Il filesystem di LinuxGli utenti, i gruppi ed i loro file

4● i permessi

corrispondono a 3 bit: uno per la lettura, uno per la scrittura ed uno per l'esecuzione.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 18: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Utilizzare Linux da shellIntroduzione

● Una shell è un interprete di comandi.● Lavora in modalità interattiva ma anche batch.● Esistono tante shell: tcsh, csh, sh, ksh, perchè

proprio bash?● Maggiori informazioni sulla bash le trovate su

http://www.gnu.org/software/bash

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 19: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Utilizzare Linux da shellIntroduzione 2

● Perchè utilizzare la shell quando esistono tante belle interfacce grafiche?– Per alcune cose utilizzare la shell è più veloce.– L'interfaccia grafica potrebbe non essere presente

sulla macchina che stiamo usando (eg. server).– Potrebbe essere l'unico modo per accedere ad una

funzionalità.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 20: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Utilizzare Linux da shellPrimo incontro con il mostro

● Si accede alla shell– quando ci si logga in modalità testuale– tramite il programma Konsole di KDE– tramite il programma Terminale di Gnome– ... tramite un qualche programma di un qualche

window manager– collegandosi da remoto alla macchina

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 21: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Utilizzare Linux da shellPrimo incontro con il mostro 2

● Si presenta come un promptnomeUtente@nomeComputer

percorsoCartellaSelezionata $

● Il carattere ~ (tilde) indica la home folder dell'utente.

...ed è lì, immobile, che attende i vostri comandi...

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 22: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Utilizzare Linux da shellConvenzioni per i comandi

● Quando si inserisce un comando questo può avere parametri ed opzioni; in generale:– le opzioni vanno prima dei parametri;– le opzioni sono precedute dal meno – o dal doppio

meno -- ;– quasi tutti i comandi hanno l'opzione –help che fa

stampare una breve guida del comando.● es: ls --help

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 23: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellNavigare il filesystem

● Con il comando cd è possibile spostarsi tra le cartelle– utilizzando un path (relativo o assouluto) come

parametro, la shell ci porta alla cartella puntata dal path.

– senza parametri ci fa ritornare nella home;– utilizzando i .. come parametro saliamo la

gerarchia di un livello;

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 24: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellVisualizzare i file

● Con il comando ls è possibile esaminare il contenuto di una cartella; alcune opzioni interessanti:– -a mostra i file nascosti;– -l mostra i file in un'unica colonna con i loro permessi, gli

utenti ed i gruppi associati, la loro dimensione in byte, l'ultima data di modifica;

– -h mostra la dimensione dei file nell'ordine di grandezza più comodo per la lettura da essere umano; questa opzione deve essere usata insieme all'opzione l.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 25: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 26: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shell

Gestione dei file● rm <nomeFile>

– Cancella un file● rm -r <nomeCartella>

– Cancella una cartella e tutte le sottocartelle● mv <nomeFile> <nuovoPath>

– Sposta un file nel nuova cartella

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 27: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shell

Gestione dei file 2● nano <nomeFile> oppure pico <nomeFile>

– Crea/modifica un file● mv <nomeFile> <nuovoNomeFile>

– Rinomina un file● mkdir <nomeCartella>

– Crea una cartella

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 28: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellCercare un file

● find <percorsoInizioRicerca> -name <schemaNomeFile> – Ricerca dal percorso indicato in tutte le sottocartelle i

file corrispondenti allo schema passato.● find <percorsoInizioRicerca> -regex <schemaNomeFile>

– Come il precedente tranne che lo schema passato e' un'espressione regolare.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 29: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellCambiare i permessi su un file

● chmod <soggettoPermessi> < + oppure - ><permesso> <file> – soggettoPermessi: u per utente proprietario, g per gruppo del

file, o per tutti gli altri.– permesso: r per la lettura, w per la scrittura, x per

l'esecuzione.● Esempio:

– chmod og-wx file1 ● rimuove a tutti coloro che non sono il proprietario il diritto

di scrittura e di esecuzione.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 30: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellEseguire un programma

● ./<nomeProgramma> – naturalmente chi prova ad eseguirlo deve avere il

permesso di farlo.– E' possibile evitare di usare il ./ solo se il programma è

contenuto in una cartella indicata nella variabile di ambiente PATH.

– Se il programma non è nella cartella corrente, sostituire il ./ con il percorso alla cartella del programma.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 31: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellCambiare la propria password

● passwd – richiede la vecchia password per assicurarsi che siete

il proprietario della password.– richiede la nuova password.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 32: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellLa guida di riferimento per i comandi

● man <comando> oppure man <funzione> – Visualizza la prima pagina relativa a quel

comando/funzione.● man <numPagina> <argomento>

– Visualizza la pagina <numPagina> relativa a quell'argomento.

● man -a <argomento>– Visualizza tutte le pagine relative a quell'argomento.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 33: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellI flussi di un programma

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

STDIN (0)STDOUT (1)

Programma

STDERR (2)

Page 34: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellLa guida di riferimento per i comandi

● cat <file> – Stampa il contenuto di un file a video.

● grep <stringa>– Legge il flusso di input e ne ristampa solo le righe che

contengono la stringa

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 35: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellRedirezione su file

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

E' possibile redirigere i flussi standard da/verso un file:● <comando> < <file di input>

● Il contenuto del <file di input> viene usato come flusso STDIN per il comando.

● <comando> > <file di output>● Lo STDOUT del programma viene salvato su <file di output>.

● <comando> 2> <file di error>● Lo STDERR del programma viene salvato su <file di error>.

Page 36: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellRedirezione su file

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Esempi:● ls --help > aiutoLs.txt

● Stampa la guida di ls dentro il file aiutoLs.txt

● sendmail [email protected] < email● Invia una email il cui contenuto è scritto nel file.

● Automazione trasferimento file in remoto con ftp.

Page 37: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellCollegamento tra programmi

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

E' possibile costruire una sequenza di programmi collegata dai flussi, in modo che l'STDOUT del programma[x] è l'STDIN del programma[x+1].

... ...P[x-1] P[x] P[x+1]

Per creare questo collegamento usiamo il simbolo pipe | (quello a sx dell'1 e sopra il backslash \ ).

Page 38: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Introduzione all'utilizzo di Linux da shellCollegamento tra programmi

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Esempi:● cat file1 | grep parola

● Stampa le righe di file1 che contengono parola● Si possono concatenare più grep per restringere l'insieme

delle righe.● Utile per cercare una chiamata di funzione in un file di codice

C.● Applicare più operazioni su un file:

● cat fileCompresso | decomprimi | stampa

Page 39: Introduzione a Linux: differenze con windows e strumenti per la programmazione

gcc – GNU C Compiler

● Parte del progetto GNU● Supporta lo standard originale del linguaggio C (C89)

ed il più recente C99● In realtà gcc oggi sta per GNU Compilers Collection ● Homepage del progetto http://gcc.gnu.org

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 40: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

gcc -GNU C CompilerIl processo di compilazione

● pre-process

● compile

● assemble

● link

esegue le #macro

crea un codice intermedio vicino a quello macchina

Trasforma il codice intermedio in codice macchina

Collega le varie parti di codice, ordinandole in un programma

Page 41: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

gcc -GNU C CompilerCominciamo a compilare qualcosa

● gcc <nomeSorgente.c>● preprocessa, compila, assembla e linka● nessun output (a schermo)● produce un eseguibile a.out #include <stdio.h>

int main(){ printf("Hello World!"); return 0;}

Page 42: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

gcc -GNU C CompilerOpzioni interessanti

● -o <nomeFile>– specifica il nome del file generato dalla

compilazione (invece di a.out);● -l <nomeLibreria>

– fa il link usando una libreria: questa opzione può essere ripetuta;

Page 43: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

gcc -GNU C CompilerOpzioni interessanti 2

● -D <MACRO>=<valoreMacro>– definisce la macro prima di processare i file;

● -I <path>– specifica una cartella in cui il compilatore deve

cercare file da includere di default (quelli tra <>);● -L <path>

– specifica una cartella in cui il compilatore deve cercare le librerie

Page 44: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

gcc -GNU C CompilerOpzioni interessanti 3

● --std=c89 oppure --std=c99– specifica che la compilazione deve essere eseguita

secondo lo standard● --pedantic

– specifica che il compilatore deve dare errore per QUALSIASI cosa che non è conforme allo standard.

Page 45: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

gcc -GNU C CompilerOpzioni interessanti 4

● -E– Preprocessa i file in input e stampa a video il

risultato;● -S

– Preprocessa e compila: non assembla né linka; ● -c

– Preprocessa, compila ed assembla, ma non linka.

Page 46: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

gcc -GNU C CompilerErrori comuni: distinzione tra include e librerie

● Negli header file vanno le dichiarazioni, non le definizioni;

● Al gcc vanno passati solo i file .c ;● Quando si utilizza una libreria esterna non basta

includere le sue dichiarazioni ma bisogna anche linkare il corpo delle sue funzioni;

● La libreria standard viene linkata automaticamente;

Page 47: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Debugging● Un debugger è uno strumento che permette di:

– controllare l'esecuzione di un programma che avete scritto, interrompendola o riprendendola in un determinato momento.

– controllare lo stato del vostro programma (variabili, stack ed altro..)

● ovvero di studiare l'esecuzione del codice da voi scritto per determinare se ci sono dei casi in cui si verificano anomalie (bug).

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 48: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Debugging● Scoprire bachi utilizzando un debugger è

un'operazione piuttosto tediosa ed andrebbe evitata per quanto possibile:– facendo una buona progettazione PRIMA ( ad es. con

diagrammi di flusso e schemi dei moduli)– utilizzando regole di buona programmazione ( ad es.

evitare le variabili globali, utilizzare dei nomi di variabili comprensibili)

... ma se proprio ci siamo presi un baco ...

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 49: Introduzione a Linux: differenze con windows e strumenti per la programmazione

gdb – GNU Debugger

● Debugger molto potente con interfaccia utilizzabile da shell.

● Fa parte del progetto GNU● Maggiori informazioni su

http://www.gnu.org/software/gdb

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 50: Introduzione a Linux: differenze con windows e strumenti per la programmazione

gdb – GNU Debugger

● Per utilizzare il debugger sul vostro programma dovete compilarlo con l'opzione -g ;

● Eseguite gdb <nomeProgramma> ;● A questo punto potete controllare l'esecuzione

del programma inserendo comandi al prompt di gdb.

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 51: Introduzione a Linux: differenze con windows e strumenti per la programmazione

gdb – GNU DebuggerComandi

● break <nomeFunzione> oppure break <nomefile>:<riga> – Inserisce un breakpoint all'inizio della funzione o alla

riga indicata;● print <nomeVariabile> oppure print <espressione>

– stampa il contenuto di una variabile o il valore di una espressione;

● run– Fa partire l'esecuzione del programma;

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 52: Introduzione a Linux: differenze con windows e strumenti per la programmazione

gdb – GNU DebuggerComandi 2

● next – Va avanti di una istruzione;

● step– entra nell'esecuzione dell'istruzione;

● finish– Continua l'esecuzione del programma finchè la

funzione corrente non termina;

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 53: Introduzione a Linux: differenze con windows e strumenti per la programmazione

gdb – GNU DebuggerComandi 3

● kill – interrompe l'esecuzione del programma;

● display <variabile> oppure display <espressione>– come print, ma la stampa viene ripetuta ad ogni

interruzione del programma;● continue

– riprende l'esecuzione del programma finché non incontra un breakpoint o il programma non termina;

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 54: Introduzione a Linux: differenze con windows e strumenti per la programmazione

gdb – GNU DebuggerNavigare la pila delle chiamte

● backtrace – mostra la pila delle chiamate;

● frame <numeroChiamata>– seleziona la chiamata di funzione associata al

numero passato;

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Page 55: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Scrivere un programma che...● Prenda in input una serie di parole

– Divise dal carattere a capo– La lettura dell'input si ferma nel caso l'utente

inserisca la parola basta.● Le inserisca in un array di parole● Al termine ristampi tutte le parole

Assumiamo che l'utente non sbagli MAI la procedura di inserimento

Page 56: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Strutturiamo il codice..

Leggi una parola dall'input

è basta?

Aggiungila nell'arrayNO

Stampa tutte le parole nell'arraySI Fine

Inizio

Page 57: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Vediamo il codice...

Page 58: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Bug numero 1● Ho usato la funzione fgets senza aver letto bene il

suo funzionamento sul manuale.● Quando la funzione incontra un a capo '\n'

interrompe la lettura dell'input; il problema è che memorizza anche questo carattere nel buffer.

● Quindi se l'utente scrive basta, nel buffer verrà scritto “basta\n” ed il primo ciclo non sarà mai terminato.

Page 59: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Bug numero 2 ● Questa è un errore grave: in C le stringhe in

realtà sono puntatori; il buffer usato per memorizzare le parole è sempre lo stesso!

● Quindi nelle celle dell array avremo sempre lo stesso puntatore, che conterrà l'ultima parola che ci abbiamo scritto sopra (“basta”).

● Cosi quando stampiamo le parole ne stampa una serie tutte uguali.

Page 60: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Bug numero 3● Oltre alle parole inserite, dentro l'array, vi è

sempre il valore sentinella basta che completa la serie.

● In fase di inserimento bisogna controllare che nell'array non ci finisca il valore sentinella. Oppure cambiare il ciclo 1.

Page 61: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

Errore stealth...● Non appare su tutti i sistemi...● E' dovuto a qualcosa che lo standard non

definisce...● Provoca un SEGMENTATION FAULT !! (ovvero

accesso a memoria non allocata!)

Tutti i puntatori nell'array NON sono inizializzati a NULL: ciò significa che se non lo fa automaticamente il sistema, andremo a chiamare la free() su puntatori non allocati dinamicamente.

Page 62: Introduzione a Linux: differenze con windows e strumenti per la programmazione

Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]

www.torlug.org www.cs.uniroma2.it

www.torlug.org