informatica:sol:laboratorio12:faq
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Prossima revisione | Revisione precedente | ||
| informatica:sol:laboratorio12:faq [27/10/2011 alle 07:40 (14 anni fa)] – creata Susanna Pelagatti | informatica:sol:laboratorio12:faq [02/03/2012 alle 09:23 (14 anni fa)] (versione attuale) – [E' possibile accedere al numero di linea in C ?] Susanna Pelagatti | ||
|---|---|---|---|
| Linea 1: | Linea 1: | ||
| + | | ||
| + | Ossia // | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== FRAM 1: Come e' fatta la '' | ||
| + | E' possibile visualizzare i campi della struttura nella pagina di manuale di '' | ||
| + | < | ||
| + | man ctime | ||
| + | </ | ||
| + | per la conversione si possono utilizzare le funzioni '' | ||
| + | |||
| + | ===== E' possibile accedere al numero di linea in C ? ===== | ||
| + | Si, e' possibile utilizzando la macro | ||
| + | < | ||
| + | __LINE__ | ||
| + | </ | ||
| + | ===== FRAM3: e' possibile modificare i file .h del primo frammento ? ===== | ||
| + | Si, e' possibile aggiungere campi alle strutture e prototipi nei file .h del primo frammento estendendo la libreria a patto che continuino a funzionare i test del primo frammento. | ||
| + | |||
| + | ===== FRAM2: e' possibile creare file temporanei ? ===== | ||
| + | Si, a patto che i file vengano creati in una directory adeguata (esempio ''/ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== FRAM1: Devo invocare perror() dentro le funzioni di libreria ? ===== | ||
| + | No, seguendo la convenzione delle funzioni di libreria C gli errori devono essere riportati con un opportuno codice di ritorno ed eventualmente settando '' | ||
| + | |||
| + | ===== FRAM1: Quali valori possono essere assegnati a '' | ||
| + | '' | ||
| + | < | ||
| + | man errno | ||
| + | </ | ||
| + | altrimenti l' | ||
| + | |||
| + | ===== Problemi con bashdb ===== | ||
| + | Usando una distribuzione Linux recente (ad esempio Ubuntu 8.04, 8.10, o comunque distribuzioni che forniscaono bash in versione 3.2 o superiore) lo script di debugging //bashdb// non funziona. Fortunatamente le stesse distribuzioni forniscono lo script gia` pacchettizzato in una versione aggiornata. Ad esempio, per installarlo sotto Ubuntu o Debian basta dare il comando | ||
| + | < | ||
| + | sudo aptitude install bashdb | ||
| + | </ | ||
| + | quindi lanciarlo normalmente con | ||
| + | < | ||
| + | bashdb nome_script | ||
| + | </ | ||
| + | (vedete anche man bashdb e l'help che ottenete digitando " | ||
| + | |||
| + | ===== Debuggare programmi con piu` processi/ | ||
| + | E` possibile usare GDB per debuggare programmi multiprocesso / multithread come indicato nella documentazione [[http:// | ||
| + | E` possibile usare i comandi indicati anche in DDD, scrivendoli manualmente nel prompt del GDB in basso nella schermata. | ||
| + | |||
| + | ===== Uso di GDB da emacs ===== | ||
| + | |||
| + | E' possibile usare il debugger GDB da emacs. Questo permette di seguire interattivamente il flusso di esecuzione in due sottofinestre dell' | ||
| + | Per attivarlo: | ||
| + | * aprire emacs | ||
| + | * invocare GDB con '' | ||
| + | * settare opputuni breakpoint e richiedere run (a questo punto emacs si divide in due sottofinestre: | ||
| + | |||
| + | ===== Perche` mtrace mostra una stringa esadecimale al posto del nome del file? ===== | ||
| + | R: Questa situazione si puo` verificare per tre ragioni differenti: | ||
| + | - il file al quale mtrace vorrebbe fare riferimento e` stato compilato senza opzione di debug ('' | ||
| + | - il file al quale mtrace vorrebbe fare riferimento e` stato compilato con il compilatore c++ ('' | ||
| + | - il file al quale mtrace vorrebbe fare riferimento e` una libreria presente sul sistema ('' | ||
| + | |||
| + | Quest' | ||
| + | <code c> | ||
| + | char *p; | ||
| + | char s[6] = " | ||
| + | |||
| + | p = strdup(s); | ||
| + | /* ... */ | ||
| + | free(p); | ||
| + | </ | ||
| + | |||
| + | ===== Ho la quota disco piena e non riesco a salvare i miei files ===== | ||
| + | R: Molto probabilmente la causa di buona parte dei problemi di quota e` dovuta all' | ||
| + | la prima cosa da fare e` vedere quanto spazio e` utilizzato inutilmente da eclipse. | ||
| + | (si assume che l' | ||
| + | < | ||
| + | (susanna): | ||
| + | 12.4M / | ||
| + | </ | ||
| + | a questo punto si puo` procedere con l' | ||
| + | **ATTENZIONE**: | ||
| + | altrimenti rischiate di cancellare tutti i vostri files | ||
| + | < | ||
| + | (susanna): | ||
| + | </ | ||
| + | |||
| + | **Oppure** | ||
| + | |||
| + | Si puo' cancellare la cache di Mozilla mediante l' utilizzo dello script [[http:// | ||
| + | < | ||
| + | (susanna): | ||
| + | (susanna): | ||
| + | (susanna): | ||
| + | </ | ||
| + | Oppure: | ||
| + | < | ||
| + | (susanna): | ||
| + | </ | ||
| + | Per un mostrare le opzioni dello script. | ||
| + | |||
| + | ===== Perche' | ||
| + | |||
| + | R: Molto probabilmente e' stata raggiunta la quota disco. | ||
| + | Per risolvere il problema e' sufficiente digitare [CTL+ALT+F1], | ||
| + | |||
| + | ===== Come faccio ad utilizzare la bash se la mia shell di default e' la csh/tcsh? ===== | ||
| + | R: Per ragioni " | ||
| + | Per sperimentare con la shell bash basta digitare | ||
| + | < | ||
| + | (susanna): | ||
| + | bash-2.05b$ | ||
| + | </ | ||
| + | oppure | ||
| + | < | ||
| + | (susanna): | ||
| + | bash-2.05b$ | ||
| + | </ | ||
| + | in entrambi i casi la vostra shell mandera' | ||
| + | < | ||
| + | bash-2.05b$ exit | ||
| + | exit | ||
| + | (susanna): | ||
| + | </ | ||
| + | oppure EOF (CTRL-D). | ||
| + | |||
| + | Per non avere un ambiente " | ||
| + | |||
| + | [[http:// | ||
| + | [[http:// | ||
| + | [[http:// | ||
| + | |||
| + | In questo modo otterrete un prompt piu' significativo e un ambiente piu` gradevole: | ||
| + | < | ||
| + | (susanna): | ||
| + | susanna@aulaa: | ||
| + | </ | ||
| + | In particolare aggiungendo ulteriori comandi di alias al terzo script potete personalizzare la shell creandovi i vostri alias usuali per i vari comandi (es, "rm -i" per " | ||
| + | |||
| + | //NOTA BENE: I sistemisti **sconsigliano vivamente** di mettere il comando '' | ||
| + | |||
| + | ===== Ho provato ad eseguire il programma digitando a.out ===== | ||
| + | **nella directory che lo contiene ma il risultato e' stato** | ||
| + | < | ||
| + | bash: a.out command not found | ||
| + | </ | ||
| + | R: La variabile di ambiente ambiente PATH non contiene la directory corrente (" | ||
| + | < | ||
| + | $ ./a.out | ||
| + | </ | ||
| + | Per risolvere il problema si deve aggiungere la directory corrente alla variabile PATH della shell, nella bash basta dare il comando: | ||
| + | < | ||
| + | $ export PATH=$PATH: | ||
| + | </ | ||
| + | o nella csh/tcsh | ||
| + | < | ||
| + | % setenv PATH ${PATH}:. | ||
| + | </ | ||
| + | Per vedere il valore del PATH | ||
| + | < | ||
| + | $ echo $PATH | ||
| + | </ | ||
| + | per capire che shell stiamo utilizzando | ||
| + | < | ||
| + | $ echo $SHELL | ||
| + | </ | ||
| + | Per non dover ripetere il comando export/ | ||
| + | |||
| + | ===== Come posso ottenere informazioni in linea sulle funzioni di libreria C? ===== | ||
| + | R: Usando le sezioni 2 e 3 dei manuali, rispettivamente per system calls e funzioni di libreria, ad esempio | ||
| + | < | ||
| + | $ man 2 read | ||
| + | $ man 3 printf | ||
| + | </ | ||
| + | |||
| + | ===== Come posso proteggere i miei file in modo che non siano leggibili dagli altri gruppi? ===== | ||
| + | R: Basta fissare un nome di directory noto solo agli utenti del gruppo (es // | ||
| + | < | ||
| + | $ chmod 711 ~ (*tolgo i diritti di lettura della mia home a tutti eccetto me*) | ||
| + | $ ls -ld ~ | ||
| + | drwx--x--x | ||
| + | $ mkdir ~/ | ||
| + | </ | ||
| + | Adesso per gli altri utenti e' impossibile fare ls sulla mia home directory es: | ||
| + | < | ||
| + | $ echo $USER (* sono l' | ||
| + | garibaldi | ||
| + | $ ls ~susanna | ||
| + | ls: / | ||
| + | </ | ||
| + | Pero' posso ancora accedere alla directory 56yu897j se ne conosco il nome | ||
| + | < | ||
| + | $ echo $USER (* sono l' | ||
| + | garibaldi | ||
| + | $ ls ~susanna/ | ||
| + | prorub/ | ||
| + | </ | ||
| + | |||
| + | ===== Ho dei Segmentation Fault quando invoco funzioni di libreria tipo free(), getenv(), etc... | ||
| + | R: Questo e' un tipico sintomo di errori nell' | ||
| + | |||
| + | Quindi la manifestazione spesso non ha niente a che vedere con il punto in cui si e' verificato l' | ||
| + | |||
| + | In questo caso la cosa da fare e' ricontrollare incrementalmente tutto il codice (magari con l' | ||
| + | |||
| + | ===== Come indento il mio codice con un buon stile? ===== | ||
| + | R: E' possibile usare il comando //indent// (vedi la sua pagina di manuale per tutte le opzioni) per indentare automaticamente il codice: una buona linea di comando e' | ||
| + | < | ||
| + | indent -kr -br -brs file.c | ||
| + | </ | ||
| + | |||
| + | |||
| + | Su Vim l' | ||
| + | |||
| + | ===== Come si effettua il testing del codice? ===== | ||
| + | R: Molto brevemente: il testing del codice non va confuso con il debugging (ovvero la ricerca dell' | ||
| + | |||
| + | E' buona norma testare sistematicamente i vari aspetti delle funzioni man mano che queste vengono sviluppate. In particolare e' una buona idea sviluppare, parallelamente al codice, un programma di test che stressa i punti importanti e controlla automaticamente che i risultati siano corretti. | ||
| + | |||
| + | In particolare, | ||
| + | |||
| + | E' anche una buona norma raccogliere tutti i test che verificano le varie funzioni in modo da ripeterli automaticamente (con opportuni script) ogni volta che il codice viene modificato per fissare un nuovo bug o aggiungere nuove funzionalita' | ||
| + | |||
| + | In rete esistono librerie che aiutano ad organizzare i test (vedi ad esempio [[http:// | ||
| + | |||
| + | ===== Quali sono le informazioni che devono essere incluse nella relazione? Come possiamo strutturarle? | ||
| + | R: Una possibile struttura della relazione e' la seguente: | ||
| + | - Introduzione: | ||
| + | * struttura complessiva dell' | ||
| + | * principali idee guida | ||
| + | - Strutture Dati: le principali strutture dati utilizzate per realizzare il progetto, si puo' fare anche un elenco puntato indicando come sono strutturate, | ||
| + | - Struttura del server: descrizione dettagliata della struttura del server con la descrizione delle fasi principali di elaborazione, | ||
| + | - Struttura del client: come server | ||
| + | - Appendice | ||
| + | * Guida per l' | ||
| + | * Compilazione | ||
| + | * Installazione | ||
| + | * Esecuzione/ | ||
| + | * Esecuzione/ | ||
| + | * Eventuali vincoli | ||
| + | - Problemi/ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Come mai la accept non funziona ? ===== | ||
| + | R: Su alcune architetture la accept() va invocata con | ||
| + | <code c> | ||
| + | struct sockaddr_un addr; | ||
| + | int ret; | ||
| + | socklen_t x2 = sizeof (addr); | ||
| + | ret = accept(s, (struct sockaddr *)& | ||
| + | </ | ||
| + | invece che passando il secondo argomento NULL. | ||
informatica/sol/laboratorio12/faq.1319701205.txt.gz · Ultima modifica: 27/10/2011 alle 07:40 (14 anni fa) da Susanna Pelagatti
