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 (13 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