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 i seguenti file:

Istruzioni per Windows e DJGPP

Chiamiamo DJGPP la directory in cui avete installato DJGPP. Per prima cosa, dovete aprire una finestra DOS. Nelle varie versioni di Windows, sono stati introdotti due programmi che, in qualche modo, emulano l'ambiente DOS: command e cmd (con il secondo, molto più evoluto del primo, disponibile nella serie NT/2000/XP). Se li avete entrambi, provate con entrambi, nel caso qualcosa non dovesse funzionare. Per lanciarli, conviene andare sul menu Avvio e scegliere Esegui. Quindi, scrivere command oppure cmd. Nella finestra DOS, dovrete per prima cosa impostare alcune variabili di ambiente, che permettono a DJGPP di sapere dove sono i suoi file. All'interno della directory DJGPP troverete un programma batch (chiamato setenv), che si preoccuperà di impostare tali variabili per voi. Per lanciarlo, portatevi nella directory DJGPP con il comando:
> cd DJGPP
E quindi digitate:
> setenv
Notate che le variabili d'ambiente così impostate sono valide solo all'interno della finestra DOS in cui avete eseguito questa procedura. Quindi dovrete ripetere questa procedura in tutte le finestre DOS che aprite.

A questo punto, spostatevi dentro la directory del testo d'esame che volete risolvere:

> cd DIR/anno-mese-giorno
Qui dovrete produrre i file es1.s ed es2.s. I file devono contenere solo testo. Su Windows non si trovano, di default, programmi molto evoluti per produrre file di solo testo. La scelta cade, normalmente, su edit oppure su notepad (blocco note). Il primo può essere avviato direttamente dalla finestra DOS, specificando come parametro il nome del file da editare (se il file non esiste, verrà creato). Ad esempio, per il primo esercizio:
> edit es1.s
Se scegliete di usare notepad (che, comunque, non ha particolari vantaggi rispetto ad edit, per i file di solo testo), state attenti al momento del salvataggio del file: dovete scegliere "tutti i file" come tipo, altrimenti l'ottuso programma si ostinerà ad aggiungere il suffisso .txt al nome del file che state salvando. Se anche ciò dovesse accadere, potete rinominare il file dalla finestra DOS:
> ren es1.s.txt es1.s
Una volta terminato, potete provare se quello che avete scritto è corretto, assemblando, collegando ed eseguendo i programmi di prova. Per il primo esercizio, il comando da eseguire per ottenere il programma di prova è:
> gcc -o es1 es1.s prova1.cpp -lgpp
Se non avete commesso errori di sintassi e/o di collegamento, otterrete il file eseguibile es1, che potete eseguire nel seguente modo:
> es1
Se non avete commesso errori, il programma stamperà una serie di numeri, che dovrete confrontare con quelli contenuti nel file es1.out. Solo se il contenuto del file è esattamente identico all'uscita di es1 potete ritenere di aver svolto correttamente l'esercizio.

Analoghe considerazioni valgono per il secondo esercizio. In questo caso, il comando per assemblare e collegare è:

> gcc -o es2 es1.s es2.s prova2.cpp -lgpp
Il file eseguibile, in questo caso, si chiamerà es2 e il suo output andrà confrontato con il contenuto del file es2.out.

ATTENZIONE: l'ambiente grafico RHIDE, almeno nella versione reperibile al centro di calcolo, non funziona bene su Windows NT/2000/XP. Quindi il suo uso non è supportato all'esame (ovvero, è installato, ma se funziona bene, altrimenti pazienza). Si sconsiglia quindi agli studenti di esercitarsi con RHIDE anche a casa.

Istruzioni per Linux

Supporremo, nel seguito, che abbiate installato gcc 2.7.2.1, scaricato da questo sito. Aprite un terminale e portatevi nella directory relativa al testo d'esame che volete svolgere:
$ cd DIR/anno-mese-giorno
Scrivete i file es1.s ed es2.s con il vostro editor preferito, oppure con emacs. (ATTENZIONE: i file che scaricate sono in formato MS-DOS. Qui trovate delle istruzioni su come convertirli per Unix). Il comando per assemblare e collegare il primo esercizio è:
$ g++27 -o es1 es1.s prova1.cpp
Mentre, per il secondo esercizio, è:
$ g++27 -o es2 es1.s es2.s prova2.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'esuibile (es1 o es2 a seconda dell'esercizio svolto). Per controllare che sia corretto, scrivete (per il primo):
$ ./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
Analoghi discorsi valgono per il secondo esercizio.

Aggiungendo l'opzione -Wa,--gstabs ai comandi 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