2015-01-13 14 views
6

Ho installato Delphi XE7 di recente. Quando ho compilato un vecchio app mia bocca aperta quando ho visto che la dimensione del file EXE è aumentata con 10MB!Che cosa sono le "informazioni di debug limitate"? (Full “informazioni di debug" genera enormi file EXE)

Giocare in "Opzioni di progetto" Ho scoperto che l'impostazione delle "Informazioni di debug" su "Informazioni di debug limitate" riduce la dimensione dell'EXE a qualcosa di MOLTO vicino all'EXE generato da Delphi XE. Forse sotto Delphi XE7 "Informazioni di debug limitate" è l'equivalente di " Debug Information 'da Delphi XE poiché risulta nella stessa dimensione EXE?

Quindi, perché le' informazioni di debug 'complete rendono l'EXE così grande (rispetto a XE)? Non riesco a compilare l'EXE con informazioni limitate (immagino) perché voglio avere pieno accesso ai bonus di debug (anche EurekaLog ne ha bisogno).
La documentazione di Embarcadero non dice nulla sulla differenza tra informazioni "limitate" e informazioni complete di debug.

La documentazione di EurekaLog è per una vecchia versione di Delphi quindi non indica chiaramente se posso usare la nuova opzione (pietosa) 'Informazioni di debug limitate' o le informazioni complete di debug. Dovrò sperimentare

+0

C'è un post correlato qui, ma non tratta il problema delle dimensioni EXE: http://stackoverflow.com/questions/19653475/what-is-the-different-between-limited-debugging-information-and- debug-informa – Ampere

+0

Prova a abilitare l'opzione "Inserisci informazioni di debug in link separato per TDS" del linker. –

+0

Non credo che EurekaLog funzionerà in questo modo. Oppure, probabilmente distribuirò anche i file TDS. Ad ogni modo, esaminerò questo. Grazie. – Ampere

risposta

13

"Informazioni di debug limitate" è un'opzione che ha effetto solo sul compilatore di targeting Android. Tuttavia, poiché tutti i compilatori condividono la stessa interfaccia, questa opzione viene visualizzata per ogni destinazione. Si applica solo a quante informazioni di debug vengono inserite in ogni singolo oggetto (.o) file. Per Android (e iOS), il formato di informazioni di debug è DWARF. DWARF è un formato molto dettagliato e può contenere informazioni di tipo strutturale altamente dettagliate su tutti i tipi in una determinata unità e per tutti i tipi da tutte le unità "utilizzate" da una determinata unità. Sotto "Informazioni di debug limitate", le informazioni sul tipo per tutte le unità utilizzate sono non generate. Ciò può significare che alcune variabili locali e di campo potrebbero non essere ispezionabili durante il debug.

Per quanto riguarda se le informazioni di debug sono incluse nell'esecuzione finale, che è controllata dall'opzione linker, non dall'opzione del compilatore. Il linker collega tutte le informazioni di debug disponibili. Se la costruzione per Android e "Debug Information" è selezionata, l'immagine finale avrà molte più informazioni e sarà molto più grande.

Ora ho intenzione di presumere che stai prendendo di mira Windows (in realtà non lo dichiari, ma userò i miei poteri psichici qui), nel qual caso, "Informazioni di debug limitate" e "Informazioni di debug" "sono la stessa cosa Sotto Windows, il formato di debug è chiamato "GIANT". Puoi dire "ironia"? DWARF è un formato estremamente dettagliato, mentre il formato GIANT di Embarcadero (originariamente di Borland) è più compatto. L'aumento delle dimensioni può essere solo dalla funzionalità di runtime aggiunta e probabilmente da un maggiore uso di generici.

+3

Grazie per l'informazione. Peccato che non ci sia documentazione. –

+0

Grazie Allen. La tua prima frase ha già spiegato quasi tutto :) – Ampere

+2

Per la cronaca, anche se il linker per Android inserisce tutte le informazioni di debug nell'immagine eseguibile (in realtà un .so su Android), tali informazioni vengono eliminate durante la creazione del file .apk che è ciò che viene effettivamente posizionato sul dispositivo (o emulatore). Per il debugging, il debugger gdb non legge le informazioni di debug dall'immagine impacchettata in .apk, ma lo legge dall'immagine collegata originariamente sul tuo hard-drive. –