Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio16:esercitazionia:esercitazione1

Questa è una vecchia versione del documento!


Esercitazione 1

Illustrazione dei principali comandi emacs. Cenni a vi. Principali differenza tra ANSI C e C99. Illustrazione uso del debugger gdb su un semplice programma. Esercizio sul debugger gdb.

Illustrazione uso gdb

Vediamo come si usa il debugger gdb usando is codice usodebug.c contenuto in questo tarball. I comandi del gdb da ricordare sono:
- run ( r ), break <file:linea> ( b ), step ( s ), next ( n ), print <variabile> ( p ), set args <argomenti>, backtrace ( bt ), finish, continue ( c ), quit ( q ).

Esercizio 1

Usare il debugger gdb (o per chi vuole la sua interfaccia grafica ddd ) per trovare gli errori in findbug.c (nello stesso tarball precedente) e correggerli.

Compilare il codice nel seguente modo (ATTENZIONE all'opzione “-g” che abilita le informazioni di debugging):

gcc -std=c99 -g findbug.c -o findbug

quindi lanciare l'eseguibile e verificare quali errori produce, poi usando il debugger:

$ gdb ./findbug

inserire un breakpoint nel main ed eseguire il programma step-by-step. Identificato l'errore modificare il programma opportunamente.

Esercizio 2

Non utilizzando la funzioni di libreria 'getopt' (man 3 getopt), scrivere un programma che effettua il parsing della linea di comando (argv) riconoscendo le seguenti opzioni:

-n <numero> -s <stringa> -m <altro-numero> -h. 

Il programma dovrà stampare le opzioni riconosciute con il relativo argomento. L'opzione -h non ha argomento e corrisponde al messaggio di help (program usage). Se e' presente l'opzione -h dovra' essere stampato solo il messaggio di usage cioè:

nome-programma -n <numero> -s <stringa> -m <numero> -h

Se ci sono opzioni non riconosciute queste dovranno essere stampate a video con il messaggio “opzione X non riconosciuta”. Per convertire le stringhe in interi usare la funzione di libreria atoi (vedere man 3 atoi) o meglio ancora la funzione strtol (vedere man strtol). Testare il programma con i seguenti casi (supponiamo che l'eseguibile si chiami cmdlineparsing):

cmdlineparsing -n 10 -m 11 -s 'ciao mondo' 
cmdlineparsing -n 10 -h     // deve stampare il messaggio di usage 
cmdlineparsing -n 10 -k 12  // k e' una opzione non riconosciuta
cmdlineparsing ----n 10 -s-s 'ciao mondo'  // deve stampare -n: 10 e -s: -s
cmdlineparsing -n10 -m11 -s'ciao mondo'  // deve stampare gli argomenti come nel primo caso
cmdlineparsing -n -m 11   // deve stampare un messaggio di errore per -n
informatica/sol/laboratorio16/esercitazionia/esercitazione1.1456304437.txt.gz · Ultima modifica: 24/02/2016 alle 09:00 (9 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki