View Full Version : [C] Problema file testo linux windows
gambelotti
26-03-2008, 20:01
Allora sto facendo un progetto e devo fare il parsing di un file dimacs... su dev gira senza problemi ma su ubuntu mi da segmenation fault senza indicare la linea dove da' errore. Allora ho notato che questo file se lo apro gedit mi accorgo che a fine linea c'è si il carattere di fine linea, ma anche un altro carattere nella nuova linea, me ne sono accorto perche mi posiziono sulla nuova linea e devo premere due volte il backspace per posizionarmi sulla linea sopra (praticamente cancello questo fantomatico carattere e ci metto io il carattere di fine linea con l'invio) . Facendo questa cosa funziona anche su linux... ma non posso toccare il file, per di piu gli altri editor di testo non mi succede questa cosa... fatto sta che su ubuntu mi da' questa noia... qualche consiglio?
Allora sto facendo un progetto e devo fare il parsing di un file dimacs... su dev gira senza problemi ma su ubuntu mi da segmenation fault senza indicare la linea dove da' errore. Allora ho notato che questo file se lo apro gedit mi accorgo che a fine linea c'è si il carattere di fine linea, ma anche un altro carattere nella nuova linea, me ne sono accorto perche mi posiziono sulla nuova linea e devo premere due volte il backspace per posizionarmi sulla linea sopra (praticamente cancello questo fantomatico carattere e ci metto io il carattere di fine linea con l'invio) . Facendo questa cosa funziona anche su linux... ma non posso toccare il file, per di piu gli altri editor di testo non mi succede questa cosa... fatto sta che su ubuntu mi da' questa noia... qualche consiglio?
Procedere cosi alla ceca non ti porterà da nessuna parte. Compila sempre il codice con il flag '-ggdb' e genera un binario. In caso di problemi, utilizza gdb con la seguente riga di comando:
gdb --readnow nomeeseguibile
Una volta letti i simboli e caricato il programma in memoria, inserisci un breakpoint almeno nella funzione main() del codice:
break main
Alla fine avvia l'esecuzione con il comando "run" ed esegui riga per riga il programma con i comandi n (next) e s (step). Questo ti darà indicativamente il punto del crash.
Un metodo piu' dispendioso, se non vuoi usare un debugger per trovare il punto di crash del programma è quello di gestire il segnale SIGSEGV mediante la famiglia di funzioni signal(), raise(), etc. etc. Questo di darà un controllo piu' completo del comportamento del tuo programma.
Questo per quanto riguarda la gestione dei crash. Per quanto riguarda la conversione dei caratteri di EOF, EOLN e NL, non serve che ti ammattisci immettendoli a mano: basta usare i comandi dos2unix quando porti un file da Windows a Linux e unix2dos quando fai l'opposto. Questo ti garantirà di avere sempre il formato corretto senza troppi mal di testa.
gambelotti
27-03-2008, 00:23
Grazie della risposta... comunque il file non lo posso toccare... non è propriamente un file di testo... è un file dimacs che serve per testare le cpu... e non lo posso toccare. Il professore vede se gira su linux, se gira bene se non gira non gli importa nulla... quindi non so proprio cosa fare... il fatto strano è che c'è solo il carattere di \n, altri caratteri di escape non ce ne sono!!!
Grazie della risposta... comunque il file non lo posso toccare... non è propriamente un file di testo... è un file dimacs che serve per testare le cpu... e non lo posso toccare. Il professore vede se gira su linux, se gira bene se non gira non gli importa nulla... quindi non so proprio cosa fare... il fatto strano è che c'è solo il carattere di \n, altri caratteri di escape non ce ne sono!!!
Ok, allora valgono le considerazioni sulla ricerca del problema. :p
Prova ad avviare il tuo programma in GDB con il comando run senza inserire breakpoints. Al momento del crash, il debugger ti avverte di un un segnale SIGSEGV e lo gestisce interrompendo l'esecuzione sulla linea incriminata.
Se il crash avviene in qualche funzione di libreria, probabilmente hai da gestire meglio come leggi il file e dove metti i dati...
Non posso essere piu' specifico, ho pochi dettagli sul problema purtroppo.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.