Testi d'Esame

Dopo aver scaricato il file appelli.tar.gz, scompattatelo in una directory (chiamiamola DIR). Dentro DIR troverete una sottodirectory per ogni appello che avete deciso di scaricare, con il nome 'anno-mese-giorno'. In ognuna delle sottodirectory troverete (tra gli altri) i seguenti file: Se non lo avete già fatto, installate gcc con il metodo previsto dalla vostra distribuzione di Linux. Aprite un terminale e portatevi nella directory relativa al testo d'esame che volete svolgere:
$ cd DIR/anno-mese-giorno
Scrivete il file es1.s con il vostro editor preferito, oppure con emacs. Il comando per assemblare e collegare il primo esercizio è:
$ g++ -o es1 -fno-elide-constructors es1.s prova1.cpp
Se vengono prodotti molti errori, potete redirigere i messaggi su un file (ad es. errori) aggiungendo, nella bash, la redirezione 2> errori sulla riga del comando da eseguire. Potete quindi avviare il vi dicendogli di interpretare il file degli errori:
$ vi -q errori
in questo modo il vi si posizionerà sulla riga corrispondente al primo errore. Per passare all'errore successivo usare la sequenza di tasti :cn e, per tornare ad un errore precedente, la sequenza :cp. Quando avete corretto tutti gli errori otterrete l'eseguibile es1. Per controllare che sia corretto, scrivete:
$ ./es1
e controllate che l'output sia identico al contenuto del file es1.out. Il controllo può essere anche eseguito automaticamente con il seguente comando, che stamperà solo le righe diverse (e quindi non stamperà niente se l'output e il contenuto del file coincidono):
$ ./es1 | diff - es1.out
Aggiungendo l'opzione -g al comando g++ verranno aggiunte le informazioni di debug negli eseguibili (per il debugger simbolico, ad es. gdb).

Se il vostro eseguibile viene terminato a causa di un accesso scorretto in memoria, può essere utile chiedere al sistema di generare il file core[2] corrispondente, in modo da ispezionare lo stato del processo al momento dell'errore. Molte distribuzioni Linux disabilitano la generazione dei file core, che può essere riabilitata con il seguente comando:

$ ulimit -c unlimited
A questo punto la shell dovrebbe informarvi della creazione del file, quando il vostro programma viene terminato, con un messaggio del genere ([1]):
Segmentation fault (core dumped)
Il file core può essere ora esaminato con l'aiuto di gdb nel seguente modo:
$ gdb es1 core
In molti casi si può così scoprire l'istruzione che ha causato l'errore, oltre a poter stampare il contenuto dei registri o esaminare la memoria (esempi).

Powered by apache Powered by Gentoo Linux Powered by MariaDB Powered by PHP Powered by Perl Site written in vi