La dimensione dell'eseguibile dovrebbe aumentare molto meno del 25%.
Sono un po 'sorpreso che aumenti di molto, ma alcuni test rapidi mostrano che almeno un grande progetto di esempio (ScummVM) aumenta l'exe da 10.205.184 byte a 10.996.224 byte semplicemente aggiungendo l'opzione /DEBUG
a la fase di collegamento (circa un aumento dell'8%). /DEBUG
viene specificato utilizzando l'opzione "Linker | Debugging | Generate Debug Info"
nell'IDE. Si noti che queste impostazioni dovrebbero non hanno alcun effetto sulle ottimizzazioni generate dal compilatore.
So che un puntatore al file .pdb viene inserito nell'eseguibile, ma non c'è molto da fare. Ho sperimentato un po 'e ho scoperto che abilitare l'opzione linker /OPT:NOREF
cambiava la differenza di dimensioni a 10.205.184 vs 10.205.696. Quindi il build non /DEBUG
ha mantenuto le stesse dimensioni, ma il build /DEBUG
è sceso a solo 512 byte più grandi (il che potrebbe essere spiegato dal puntatore-a-pdb - forse il linker arrotonda a qualche multiplo di 512 o qualcosa del genere). Molto meno dell'1% in più. Apparentemente, aggiungendo /DEBUG
il linker manterrà oggetti senza riferimento a meno che non si specifichi anche /OPT:NOREF
. (Opzione "Linker | Optimization | References"
nell'IDE).
Il programma funzionerà correttamente senza il file .pdb - è possibile scegliere di inviarlo ai clienti se si desidera fornire una migliore esperienza di debug sul sito del cliente. Se vuoi solo essere in grado di ottenere tracce di stack decenti, non hai bisogno di avere il file .pdb sul computer del cliente - loro (o qualche strumento/funzionalità che fornisci) possono inviare un file di dump che può essere caricato in un debugger sul tuo sito con il file .pdb disponibile e ottieni le stesse informazioni di traccia stack port-mortem.
Una cosa, ovviamente, è che è necessario archiviare i file .pdb insieme alle proprie versioni. Il pacchetto "Debugging Tools per Windows" (che ora è distribuito in Windows SDK) fornisce uno strumento server dei simboli in modo da poter archiviare .pdbs e recuperarli facilmente per il debug.
L'unico inconveniente che posso pensare alla distribuzione di file .pdb è che può semplificare il reverse engineering dell'applicazione, se è una preoccupazione per voi.Si noti che Microsoft distribuisce i simboli per Windows (utilizzando un server di simboli pubblici) nonché i pacchetti dei set di simboli completi per alcune versioni specifiche. Tuttavia, i simboli che distribuiscono vengono sottoposti a un passaggio di disinfezione che rimuove alcuni elementi che considerano sensibili. Puoi fare lo stesso (o simile) usando l'opzione /PDBSTRIPPED
del linker ("Linker | Debugging | Strip Private Symbols"
nell'IDE). Vedi the MSDN docs per i dettagli su ciò che l'opzione rimuove. Se stai per distribuire i simboli, è probabilmente appropriato utilizzare questa opzione.
fonte
2011-06-15 21:45:10
Apparentemente, SCUMVM ha pochissimo codice non referenziato :) Dopo aver abilitato lo stripping dei simboli senza riferimento, la dimensione dell'eseguibile è tornata normale. Grazie mille! –
Grazie per aver segnalato il riferimento del linker – Gob00st