2012-12-14 18 views
17

Voglio scoprire quale codice causa tempi di compilazione lenti in gcc. Precedentemente avevo un codice compilato lentamente e qualcuno mi ha detto l'interruttore della riga di comando che consente a gcc di stampare ogni fase che compila, incluse ogni funzione/variabile/simbolo e così via. Ciò mi ha aiutato molto (potevo letteralmente vedere in console dove si blocca gcc), ma ho dimenticato qual era l'opzione.Traccia gcc compilazione e quale codice rallenta

+0

Nota: per la lentezza generale, può valere la pena di 'ptrace' l'invocazione (ad esempio, una lunga lista di direttive' -I' potrebbe causare una ricerca eccessivamente lunga dei file di intestazione). –

+0

Sì, grazie. Ma per questo caso ho bisogno di misurare solo la compilazione pre-elaborata (perché distcc è usato insieme alle intestazioni precompilate). – queen3

risposta

22

ho trovato (dal gcc man page):

-Q

rende la stampa compilatore fuori ogni nome di funzione come viene compilato, e stampare alcune statistiche su ogni passaggio, quando finiture.

+0

Buono a sapersi, grazie per la condivisione. Non sapevo di quell'interruttore. – user1284631

4

Vedere anche this answer per una domanda abbastanza simile.

È molto probabilmente vogliono invoke GCC con -time o più probabilmente -ftime-report che ti dà il tempo speso dai cc1 o cc1plus ... (il compilatore corretto avviato dal comando gcc o g++), che mostra il tempo trascorso in ogni fase interna o passaggi del compilatore GCC.

Scoprirai che per i programmi in C, l'analisi è una piccola parte del tempo di compilazione, non appena chiedi qualche ottimizzazione, ad es. -O1 o -O2. (Questo è meno vero per C++, quando l'analisi può richiedere la metà del tempo, in particolare poiché l'espansione del modello viene considerata come analisi).

Empiricamente, ciò che rallenta GCC sono corpi funzione molto lunghi. Meglio avere 50 funzioni di 1000 linee ciascuna rispetto a una singola funzione di 50000 linee.

+0

Nel nostro codice C++, l'analisi è del 50-60% del tempo (come riportato da -ftime-report). – queen3

+0

Quindi il mio commento "meno vero per C++" –

Problemi correlati