PDA

View Full Version : [C] Simboli di debug


Unrue
03-08-2008, 10:18
Ciao ragazzi,
una domanda: quando compilo con i simboli di debug, dunque con il flag "-g", l'esecuzione dell'applicazione è più lenta? O rallenta solo in fase di compilazione?
Thanks!

andbin
03-08-2008, 10:42
quando compilo con i simboli di debug, dunque con il flag "-g", l'esecuzione dell'applicazione è più lenta? O rallenta solo in fase di compilazione?Generalmente se si vuole attivare il debugging non si vogliono avere anche le ottimizzazioni. Il motivo è che le ottimizzazioni fatte dal compilatore possono produrre risultati inaspettati. Parti di codice potrebbero essere spostate (es. fuori da un loop) o addirittura eliminate o certe variabili dichiarate ma non usate vengono eliminate del tutto.
In tal caso debuggare un programma ottimizzato può dare un po' di confusione.

Il gcc ad esempio permette di usare il flag -g con -O quindi è possibile debuggare codice ottimizzato. Ma in generale è bene togliere le ottimizzazioni in fase di debug e attivarle solo per la compilazione "release".

Unrue
03-08-2008, 11:04
Generalmente se si vuole attivare il debugging non si vogliono avere anche le ottimizzazioni. Il motivo è che le ottimizzazioni fatte dal compilatore possono produrre risultati inaspettati. Parti di codice potrebbero essere spostate (es. fuori da un loop) o addirittura eliminate o certe variabili dichiarate ma non usate vengono eliminate del tutto.
In tal caso debuggare un programma ottimizzato può dare un po' di confusione.

Il gcc ad esempio permette di usare il flag -g con -O quindi è possibile debuggare codice ottimizzato. Ma in generale è bene togliere le ottimizzazioni in fase di debug e attivarle solo per la compilazione "release".

Il fatto è che ho compilato per sbaglio un grosso programma con -02 -g :D Quindi mi interessava sapere se devo ricompilare tutto togliendo il -g.

andbin
03-08-2008, 11:07
Il fatto è che ho compilato per sbaglio un grosso programma con -02 -g :D Quindi mi interessava sapere se devo ricompilare tutto togliendo il -g.Il codice quindi è ottimizzato ad un certo livello. Puoi anche solo togliere i simboli di debugging direttamente dall'eseguibile usando il tool 'strip'.

Unrue
03-08-2008, 11:12
Il codice quindi è ottimizzato ad un certo livello. Puoi anche solo togliere i simboli di debugging direttamente dall'eseguibile usando il tool 'strip'.

Ok grazie :)

Unrue
03-08-2008, 11:17
PS un ultima cosa: E' possibile capire se un file oggetto è stato compilato con il -g?

andbin
03-08-2008, 15:24
PS un ultima cosa: E' possibile capire se un file oggetto è stato compilato con il -g?Puoi vedere se ha una lista di simboli, vedi il tool 'nm'.