2014-07-21 4 views
6

C'è un modo (opzione g ++?) Per verificare quale codice viene generato implicitamente dal compilatore C++ (ad esempio tutti i costruttori/distruttori predefiniti)?Controllo del codice generato implicitamente dal compilatore C++

Avere il codice C++ generato sarebbe l'ideale, ma almeno l'assemblaggio sarebbe buono. Usando:

g++ -S -g -O0 <file.cpp> 

non mi dà alcuna etichetta con costruttori generati/distruttori.

+1

A seconda delle azioni eseguite da questi operatori, è probabile che siano in linea. –

+0

Inoltre, http://gcc.godbolt.org/ è piuttosto utile per questo. Ad esempio, http://goo.gl/vB41Mi. –

+0

Quasi certamente non genera codice C++, solo assemblaggio, da qualche parte. Provalo su un file che * utilizza * la classe. – EJP

risposta

6

Penso che l'opzione -fdump-tree-original sia il più vicino possibile. Sfortunatamente mostrerà sia il tuo codice che il codice generato automaticamente, ma non etichetterà quale è quale. Tuttavia è il più leggibile dei dump di GCC e mostra il codice generato prima che vengano eseguite le ottimizzazioni.

Un'altra opzione sarebbe quella di utilizzare -fdump-translation-unit. Ciò crea una discarica grezza dell'albero con letteralmente tutto ciò che contiene. I nodi compilati dal compilatore verranno contrassegnati come "artificiali". Tuttavia, il formato non è facile da leggere per gli esseri umani e c'è un sacco di guadagni anche per un file sorgente banale. Per ricavarne qualche informazione utile probabilmente dovresti scrivere un programma per leggerlo e poi camminare sulla struttura per trovare i nodi che ti interessano e stamparli in un formato più leggibile.