> cd DJGPPE quindi digitate:
> setenvNotate 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-giornoQui 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.sSe 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.sUna 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 -lgppSe non avete commesso errori di sintassi e/o di collegamento, otterrete il file eseguibile es1, che potete eseguire nel seguente modo:
> es1Se 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 -lgppIl 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.
$ cd DIR/anno-mese-giornoScrivete 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.cppMentre, per il secondo esercizio, è:
$ g++27 -o es2 es1.s es2.s prova2.cppSe 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 erroriin 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):
$ ./es1e 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.outAnaloghi 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 unlimitedA 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 coreIn 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).